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
。你能告诉我问题在哪里,我该如何解决?谢谢!
答案 0 :(得分:3)
问题是这个
stringToSplit.IndexOf(c) > 0)
在"TestTruck"
中,第一个字母(索引== 0)也是T
,因此不会输入if
。
相反,我会使用for-loop
并检查当前的char是否是第一个,然后你可以跳过拆分:
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]);
}
答案 1 :(得分: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();
}
答案 2 :(得分: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
答案 3 :(得分: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();