字符串方法切割字符串部分

时间:2013-10-03 16:59:58

标签: c# string output

我已经构建了一个字符串构建器,如果它是大写的话,可以在文本中添加空格。输入的句子如下所示:“ThisIsASentence。”由于它以大写字母开头,字符串构建器会将句子修改为:“这是一个句子”。

我的问题是,如果我有一个像“thisIsASentence”这样的句子。字符串生成器将正常分隔句子:“这是句子。”

第一个角色前面都有空格。

当句子贯穿此行时:

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

如果输入的第一个字母是小写的,它将被截断,第二个字母变为大写。

该行旨在使第一个字母保持大写,并将其余字母设为小写。

在运行该行之前添加trim语句不会改变输出。

现在是我的整体代码:

        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;

2 个答案:

答案 0 :(得分:1)

使用“thisIsASentence”运行代码时,在foreach循环之后,结果将是“this Is A Sentence”,因为它不会在开头插入空格。

然后你的下一行将把索引1处的字符(这是这里的'h'),将其设为大写,然后追加其余的字符串,从而产生“他是一个句子”

要解决此问题,您可以在循环后执行result = result.Trim(),然后从索引0开始,生成下一行result = result.Substring(0, 1).ToUpper() + result.Substring(1).ToLower();

答案 1 :(得分:0)

使用result.SubString(1,1),您假设输入的第一个字母始终大写,因此您将始终在字符串的开头添加空格。你已经看到情况并非如此。

所以我基本上会看到两个选项:

在替换前检查空格的if块中包裹该行;

如果您的规范允许,请将输入的第一个字母大写。