Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于在大写字符上拆分字符串的自定义函数无法按预期工作_C#_Algorithm - Fatal编程技术网

C# 用于在大写字符上拆分字符串的自定义函数无法按预期工作

C# 用于在大写字符上拆分字符串的自定义函数无法按预期工作,c#,algorithm,C#,Algorithm,如果我传递这样的字符串: public static string UpperCaseStringSplitter(string stringToSplit) { var stringBuilder = new StringBuilder(); foreach (char c in stringToSplit) { if (Char.IsUpper(c) && stringToSplit.IndexOf(c) > 0)

如果我传递这样的字符串:

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();
}
输出是预期的:
“Test Srak”

但是,如果有两个相同的字母,其中一个是小写,另一个是大写,相邻排列,则不会发生拆分:

例如,如果输入为:

TestSrak
输出也是
TestTruck
。你能告诉我哪里出了问题,我怎样才能解决它吗。谢谢

问题在于

TestTruck
“TestTruck”
中,第一个字母(索引==0)也是
T
,因此如果
,它将不会进入

相反,我将使用
for循环
并检查当前字符是否是第一个字符,然后您可以跳过拆分:

stringToSplit.IndexOf(c) > 0)
for(int i=0;i0&&Char.IsUpper(stringToSplit[i]))
stringBuilder.Append(“”.Append(stringToSplit[i]);
其他的
stringBuilder.Append(stringToSplit[i]);
}
试试这个:

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]);
}
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
公共静态字符串UpperCaseStringSplitter(字符串stringToSplit)
{
var stringBuilder=新的stringBuilder();
对于(int i=0;i 0)
stringBuilder.Append(“+c”);
其他的
stringBuilder.Append(c);
}
返回stringBuilder.ToString();
}

Tim Schmelter已经确定了代码的问题,但是如果您试图在字符串中的大写字符之前添加空格,则可以尝试以下操作(使用LINQ)

试试这个:

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]);
}
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
if(string.IsNullOrWhiteSpace(stringToSplit))返回stringToSplit;
var stringBuilder=新的stringBuilder();
for(int i=0;i
。也改变了
iThanks!这就是问题所在。