2012-11-19 19 views
2
public static string UpperCaseStringSplitter(string stringToSplit) 
{ 
    var stringBuilder = new StringBuilder(); 
    foreach (char c in stringToSplit) 
    { 
     if (Char.IsUpper(c) && stringToSplit.IndexOf(c) > 0) 
      stringBuilder.Append(" " + c); 
     else 
      stringBuilder.Append(c); 
    } 
    return stringBuilder.ToString(); 
} 

如果我通過一個字符串是這樣的:對大寫字符分割字符串的自定義功能不按預期工作

TestSrak 

輸出的預期之一:"Test Srak"

但是,當有兩個相同的字母,其中一個是小寫,另一個是大寫彼此相鄰,拆分不會發生:

例如如果輸入的是:

TestTruck 

輸出也是TestTruck。你能告訴我問題在哪裏,我該如何解決。謝謝!

回答

3

問題是這樣的

stringToSplit.IndexOf(c) > 0) 

"TestTruck"的第一個字母(索引== 0)也是T,因此它不會進入if

相反,我會用一個for-loop並檢查當前的字符是第一個,那麼你可以跳過分裂:

for(int i=0; i < stringToSplit.Length; i++) 
{ 
    if (i > 0 && Char.IsUpper(stringToSplit[i])) 
     stringBuilder.Append(" ").Append(stringToSplit[i]); 
    else 
     stringBuilder.Append(stringToSplit[i]); 
} 
+0

此。還將'i

+0

謝謝!這是問題。 – Mdb

3

試試這個:

public static string UpperCaseStringSplitter(string stringToSplit) 
{ 
    var stringBuilder = new StringBuilder(); 
    for(int i = 0; i <stringToSplit.Length; i++) 
    { 
     char c = stringToSplit[i]; 

     if (Char.IsUpper(c) && i > 0) 
      stringBuilder.Append(" " + c); 
     else 
      stringBuilder.Append(c); 
    } 
    return stringBuilder.ToString(); 
} 
1

與您的代碼的問題有已被Tim Schmelter的answer識別,但如果您嘗試在字符串中的大寫字符之前追加空格,則可以嘗試以下(使用LINQ)

string str = "TestTrak"; 
string newString = string.Join("", 
         str.Select(r=> char.IsUpper(r) ?" " + r: r.ToString())); 
newString = newString.Trim(); //to remove space from the start 
0

試試這個:

if (string.IsNullOrWhiteSpace(stringToSplit)) return stringToSplit; 
var stringBuilder = new StringBuilder(); 
for (int i = 0; i < stringToSplit.Length; i++) 
{ 
    if (Char.IsUpper(stringToSplit[i])) 
    { 
     stringBuilder.Append(" "); 
    } 
    stringBuilder.Append(stringToSplit[i]); 
} 
return stringBuilder.ToString().Trim();