【问题标题】:String methods cutting out string parts切出字符串部分的字符串方法
【发布时间】:2013-10-03 16:59:57
【问题描述】:

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

我的问题是,如果我有一个像“thisIsASentence”这样的句子。字符串生成器会像平常一样分隔句子:“this Is A Sentence.”

在第一个字符前面仍然有一个空格。

当句子贯穿这一行时:

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

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

该行是为了保持输入的第一个字母大写,其余的设置为小写。

在运行该行之前添加一条修剪语句不会改变输出。

这是我现在的整体代码:

        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;

【问题讨论】:

    标签: c# string output


    【解决方案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();

    【讨论】:

    • 现在我的问题是,如果第一个字母输入大写。它会将其更改为小写。难道是使用 toUpper();在已经大写的字母上将其更改为小写?
    • 我对此进行了测试,效果很好。确保使用 result = result.Trim(); 修剪结果或初始化结果: string result = sentenceSB.ToString().Trim();
    【解决方案2】:

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

    所以我基本上看到了两种选择:

    将该行包装在一个 if 块中,在替换之前检查空格;

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-22
      • 2020-11-27
      • 2010-12-25
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      相关资源
      最近更新 更多