2011-10-25 45 views
0

我使用C#2.0和我有以下類型的字符串:C#2.0的功能將返回格式化字符串

string id = "tcm:481-191820"; or "tcm:481-191820-32"; or "tcm:481-191820-8"; or "tcm:481-191820-128"; 

字符串的最後部分也沒有關係,即(-32,-8, -128),無論字符串是否會在結果下面呈現。

現在,我需要寫一個函數,將上面的字符串作爲輸入。像下方將輸出爲「中醫認爲:0-481-1

public static string GetPublicationID(string id) 
{ 
    //this function will return as below output 
    return "tcm:0-481-1" 
} 

請建議!

+0

這個函數應該返回id的子串嗎? – mao

+0

@mau:在中間有一些額外的東西(「0-」)。但是,子串似乎是明顯的解決方案。 – Chris

+0

然後,似乎克里斯的解決方案是合適的 – mao

回答

1

如果最後的「1」是靜態的,你可以使用:

public static string GetPublicationID(string id) 
{ 
    int a = 1 + id.IndexOf(':'); 
    string first = id.Substring(0, a); 
    string second = id.Substring(a, id.IndexOf('-') - a); 
    return String.Format("{0}0-{1}-1", first, second); 
} 

,或者「-1」,是一個令牌的第一部分,試試這個

public static string GetPublicationID(string id) 
{ 
    int a = 1 + id.IndexOf(':'); 
    string first = id.Substring(0, a); 
    string second = id.Substring(a, id.IndexOf('-') - a + 2); 
    return String.Format("{0}0-{1}", first, second); 
} 

這句法的作品甚至不同的長度模式,假設你的字符串是

first_part:second_part-anything_else 
+0

嗯......我沒有考慮到最後的-1可能是靜態的。我只是假設它是下一個數字塊的第一個數字。 – Chris

+0

@Chris:老實說我不知道​​。無論如何,我編輯的代碼應該涵蓋兩種情況;) – Marco

1

所有你需要的是:

string.Format("{0}0-{1}", id.Substring(0,4), id.Substring(4,5)); 

這只是使用子拿到的前四個字符,然後在未來五年,並把它們與在那裏0-格式。

這確實假定你的格式是每個位置(在你的例子中)的固定數量的字符。如果字符串可能是abcd:4812...,那麼您將不得不稍微修改它以獲取正確長度的字符串。請參閱Marco對該技術的回答。如果長度保持不變,我會建議使用他,如果你需要可變長度和我的。

另外,作爲附加說明,您的原始函數返回一個靜態字符串確實適用於您提供的所有示例。我假設有其他數字可見,但如果它只是後綴的變化,那麼你可以愉快地使用一個靜態字符串(在這一點聲明一個常量或東西,而不是使用方法可能會更好)。

0

強制正則表達式答案:

using System.Text.RegularExpressions; 

public static string GetPublicationID(string id) 
{ 
    Match m = RegEx.Match(@"tcm:([\d]+-[\d]{1})", id); 
    if(m.Success) 
     return string.Format("tcm:0-{0}", m.Groups[1].Captures[0].Value.ToString()); 
    else 
     return string.Empty; 
} 
0
Regex regxMatch = new Regex("(?<prefix>tcm:)(?<id>\\d+-\\d)(?<suffix>.)*",RegexOptions.Singleline|RegexOptions.Compiled); 
    string regxReplace = "${prefix}0-${id}"; 

string GetPublicationID(string input) { 
     return regxMatch.Replace(input, regxReplace); 
} 
    string test = "tcm:481-191820-128"; 
    stirng result = GetPublicationID(test); 
    //result: tcm:0-481-1