2011-08-08 171 views
3

我有一個字符串,其中第三個最後一個字符有時是,如果是這種情況,我想用.替換它。該字符串也可以有其他的,。有沒有一個優雅的解決方案呢?c#字符串字符替換

編輯:謝謝大家的答案。只是爲了澄清,是由倒數第三我指的是形式xxxxxx,xx的字符串(這是一個歐洲貨幣東西)

+0

是逗號將被替換*總是*出現在第三個fr last最後的位置(如果它出現在所有)? –

+1

你可以發佈一個示例字符串嗎? – 2011-08-08 13:47:30

+0

@Fredrik - 是的,它總是會出現在倒數第三的位置。 –

回答

7

如何:

if (text[text.Length - 3] == ',') 
{ 
    StringBuilder builder = new StringBuilder(text); 
    builder[text.Length - 3] = '.'; 
    text = builder.ToString(); 
} 

編輯:希望以上僅僅是關於最有效的方法。你可以嘗試使用字符數組來代替:

if (text[text.Length - 3] == ',') 
{ 
    char[] chars = text.ToCharArray(); 
    chars[text.Length - 3] = '.'; 
    text = new string(chars); 
} 

使用Substring也能發揮作用,但我不認爲這是任何更具可讀性:

if (text[text.Length - 3] == ',') 
{ 
    text = text.Substring(0, text.Length - 3) + "." 
      + text.Substring(text.Length - 2); 
} 

編輯:我一直在假設中這種情況你已經知道文本將至少有三個字符長度。如果情況並非如此,那麼你顯然也需要一個測試。

+0

+1 StringBuilder在這裏有點沉重,不是嗎? – 2011-08-08 13:50:03

+0

@代碼:比較重?我想不出更有效率的方法 - 你能嗎? –

+2

+1 - 如果op代表最後的第三個,那麼這是目前唯一可行的解​​決方案。 – JonH

4
string text = "Hello, World,__"; 

if (text.Length >= 3 && text[text.Length - 3] == ',') 
{ 
    text = text.Substring(0, text.Length - 3) + "." + text.Substring(text.Length - 2); 
} 

// text == "Hello, World.__" 
+2

+1,但他說「倒數第三個字符」,所以我不知道這是否意味着第三個**到最後一個字符。 – 2011-08-08 13:48:56

+0

+1這個也是 – JonH

+0

+1 @dtb - 很好的答案。對不起,我不能給出兩個正確的答案。 –

1

試試這個

System.Text.RegularExpressions.Regex.Replace([the_string], "(,)(.{2})$", ".$2") 

應該這樣做,如果通過「第三最後一個字符」你從字面上指的是整個字符串中的第三最後一個字符。

這樣說 - 你可能需要調整,如果有新的行 - 例如添加RegexOptions.Singleline枚舉作爲一個額外的參數。

爲了獲得更好的性能 - 也許 - 你可以預先聲明一個類體內的正則表達式:當你想使用它,它

static readonly Regex _rxReplace = new Regex("(,)(.{2})$", RegexOptions.Compiled); 

然後只是:

var fixed = _rxReplace.Replace([the_string], ".$2"); 
+0

+1 @Andras - 感謝您的回答 –

2

更合適的方法可能會使用文化

string input = "12345,67"; 
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("nl-NL"); 
decimal value = System.Convert.ToDecimal(input); 
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 
string converted = string.Format("{0:C}", value); 
+0

我知道現在的問題'已完成',但是+1。在OP編輯這個問題後,我確實想到了這個問題,以包括他之後的實際情況。 –