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!这就是问题所在。