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。你能告诉我问题出在哪里,我该如何解决。谢谢!

4

4 回答 4

3

问题是这个

stringToSplit.IndexOf(c) > 0)

"TestTruck"第一个字母(索引== 0)也是一个T,因此它不会进入if

相反,我会使用 afor-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]);
}
于 2012-11-19T09:05:39.403 回答
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();
}
于 2012-11-19T09:07:26.113 回答
1

Tim Schmelter 的回答已经确定了您的代码问题,但是如果您尝试在字符串中的大写字符之前附加一个空格,那么您可以尝试以下操作(使用 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
于 2012-11-19T09:12:18.567 回答
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();
于 2012-11-19T09:13:29.807 回答