2015-04-15 15 views
0

我有一個這樣的字符串:如何一封信之前來到每個數字後添加一個換行符

String s ="6,44 6,35 +0,63asd 4,27fgh 4,14 45,6 +777,4cvbvc"; 

我要插入一個換行符到每一個數字,字母等之間的那些點:+ 0,63(這裏必須是換行符)asd。我寫了下面的代碼,但它給長度更改錯誤。也許這可能是因爲我的程序功能或c#的功能。但我需要堅持功能。那麼你能向我推薦一個解決方案嗎?下面的代碼無法解決它,我找不到任何其他方式。

int k = s.Length; 
for (int i = 0; i < k; i++) 
      if (char.IsDigit(s[i - 1]) && char.IsLetter(s[i])) 
       s = s.Insert(i, Strings.Chr(10).ToString()); 

謝謝你的幫忙。乾杯。

+0

探索正則表達式ES隊友:http://www.regexr.com/ – bit

回答

0

您需要從1開始循環,否則將會發生異常,因爲i=0s[i-1]變爲s[-1]。 現在你的程序應該可以工作了,但是我建議你使用一個stringbuilder,因爲string.Insert每次你調用它時都會創建一個新的字符串實例,如果輸入字符串很長,那麼使得你的程序非常慢。 此外,如果您在Windows環境中,換行符由「\ r \ n」表示,這是c#中的Environment.NewLine。 所以,你的代碼應該是這樣的:

StringBuilder builder=new StringBuilder(s); 
int offset=0; 
for (int i = 1; i < s.Length; i++) 
{ 
    if (char.IsDigit(s[i - 1]) && char.IsLetter(s[i])) 
    { 
     builder.Insert(i+offset, Environment.NewLine); 
     //every time you add a line break you need to increment the offset 
     offset+=Environment.NewLine.Length; 
    } 
} 
s=builder.ToString(); 
0

您的解決方案HASE一個錯誤 - 循環索引範圍,你應該從1開始,因爲你有表達式(i-1) 這裏是解決 https://dotnetfiddle.net/FMvpqj

0

請試試這個代碼

String myString=""; 
    int k = s.Length; 
    for (int i = 0; i < k; i++) 
       if (char.IsDigit(s[i - 1]) && char.IsLetter(s[i])) 
        myString = myString + Strings.Chr(10).ToString() + s.Substring(i,k-i); 
s=myString; 
0

你可以這樣做:

int k = s.Length; 
int i= 1; 
while (i < s.Length) 
{ 
    if ((char.IsDigit(s[i - 1]) && char.IsLetter(s[i])) || 
     (char.IsLetter(s[i-1]) && char.IsDigit(s[i]))) 
    { 
     s = s.Insert(i, ((char)10).ToString()); 
     i++; 
    } 
    i++; 
} 
相關問題