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".

ただし、一方が小文字で他方が大文字である 2 つの同じ文字が隣り合っている場合、分割は発生しません。

たとえば、入力が次の場合:

TestTruck

出力もTestTruck. どこに問題があり、どうすれば修正できるか教えてください。ありがとう!

4

4 に答える 4

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 に答える
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]);
}
于 2012-11-19T09:05:39.403 に答える
1

コードの問題は Tim Schmelter's 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
于 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 に答える