0

大文字の場合にテキストにスペースを追加する文字列ビルダーを作成しました。入力する文は、「ThisIsASentence.」のようになります。大文字で始まるため、文字列ビルダーは文を次のように変更します: "This Is A Sentence."

私の問題は、「thisIsASentence」のような文があった場合です。文字列ビルダーは通常のように文を区切ります: "これは文です."

どちらも最初の文字の前にスペースがあります。

文がこの行を通過すると:

result = result.Substring(1, 1).ToUpper() + result.Substring(2).ToLower();

入力された最初の文字が小文字の場合、それが切り捨てられ、2 番目の文字が大文字になります。

この行は、入力された最初の文字を大文字にし、残りを小文字に設定することを意図していました。

その行を実行する前にトリムステートメントを追加しても、出力は何も変わりません。

ここに私の全体的なコードがあります:

        private void btnChange_Click(object sender, EventArgs e)
    {   
        // New string named sentence, assigning the text input to sentence.
        string sentence;
        sentence = txtSentence.Text;

        // String builder to let us modify string
        StringBuilder sentenceSB = new StringBuilder();

        /*
         *  For every character in the string "sentence" if the character is uppercase,
         *  add a space before the letter,
         *  if it isn't, add nothing.
         */
        foreach (char c in sentence)
        {
            if (char.IsUpper(c))
            {
                sentenceSB.Append(" ");
            }
            sentenceSB.Append(c);
        }


        // Store the edited sentence into the "result" string
        string result = sentenceSB.ToString();

        // Starting at the 2nd spot and going 1, makes the first character capitalized
        // Starting at position 3 and going to end change them to lower case.
        result = result.Substring(1, 1).ToUpper() + result.Substring(2).ToLower();

        // set the label text to equal "result" and set it visible.
        lblChanged.Text = result.ToString();
        lblChanged.Visible = true;
4

2 に答える 2

1

「thisIsASentence」を使用してコードを実行すると、foreach ループの後、最初にスペースが挿入されないため、結果は「this Is A Sentence」になります。

次に、次の行では、インデックス 1 の文字 (この場合は「h」) を取得し、大文字にして、残りの文字列を追加すると、「His Is A Sentence」になります。

これを修正するresult = result.Trim()には、ループの後に実行し、インデックス 0 から開始して、次の行を作成します。result = result.Substring(0, 1).ToUpper() + result.Substring(1).ToLower();

于 2013-10-03T17:09:51.010 に答える
0

ではresult.SubString(1,1)、入力の最初の文字が常に大文字であると想定しているため、常に文字列の先頭にスペースを追加します。そうではないことは既にお分かりでしょう。

したがって、基本的に2つのオプションがあります。

置換前にスペースをチェックする if ブロックでその行をラップします。

仕様で許可されている場合は、入力の最初の文字を大文字にします。

于 2013-10-03T17:12:40.637 に答える