繁体   English   中英

C# 将字符串中每个句子的首字母大写

[英]C# Capitalize first letter in in each sentence in a string

我想将字符串中每个句子的第一个字母大写。 我有一个字符串,例如。 “你好,你好吗?我很好,你呢?我很好。天气不错!”

我想将其中每个句子的第一个字母大写。 所以,“你好,你好吗?我很好,你呢?” 等等

编辑:到目前为止,我刚刚尝试过

public static string FirstCharToUpper(string input)
        {
            if (String.IsNullOrEmpty(input))
                throw new ArgumentException("ARGH!");
            return input.First().ToString().ToUpper() + input.Substring(1);
        }

但这将每个单词的第一个字母大写,而不是句子:/

我建议简单的方法,迭代字符串。

您也可以将其作为string的扩展名。

public static class StringExtension
{
    public static string CapitalizeFirst(this string s)
    {
        bool IsNewSentense = true;
        var result = new StringBuilder(s.Length);
        for (int i = 0; i < s.Length; i++)
        {
            if (IsNewSentense && char.IsLetter(s[i]))
            {
                result.Append (char.ToUpper (s[i]));
                IsNewSentense = false;
            }
            else
                result.Append (s[i]);

            if (s[i] == '!' || s[i] == '?' || s[i] == '.')
            {
                IsNewSentense = true;
            }
        }

        return result.ToString();
    }
}

所以,您可以按照以下方式使用它

 string str = "hello, how are you? i'm fine, you? i'm good. nice weather!".CapitalizeFirst();

所以str等于

你好,你好吗? 我很好,你呢? 我很好。 好天气!

迭代字符串:创建一个包含停止字符的列表。

然后检查该字符串中的每个字母,如果它在列表中的话。 如果它在列表中,则在此之后将字符大写。

对于第一个字符,它总是大写的,你应该静态。

或者,你可以像丹说的那样做,它也有效。

Microsoft Outlook 2010提供了将所选文本格式化为句子大小写的选项,请转到格式化文本选项卡 - 字体组,您会在缩小字体选项旁边找到一个更改大小写选项,缩短很长一段时间,你需要这样的东西在你的代码发生,遗憾的是.net中没有定义内置属性。

但请查看堆栈溢出中已经发生的对话。 .NET方法将字符串转换为句子大小写

您将需要一个名为txtInput的文本框和另一个名为txtOutput的文本框。 然后运行此代码,例如按下按钮:

 bool Upper = true;
        foreach(char c in txtInput.Text)
        {
            if (Upper == true)
            {
                if (c == ' ')
                {
                    txtOutput.Text += c;
                    continue;
                }
                txtOutput.Text += c.ToString().ToUpper();
                Upper = false;
            }
            else
            {
                txtOutput.Text += c;
            }
            if (c == '?' || c == '!' || c == '.')
                Upper = true;


        }

截屏:

截图

已经说过几次了,遍历字符数组。 这样做的主要原因是它保留了字符串结构而不是拆分、上/子字符串和连接。

下面处理一些场景,例如不要在数字后大写字母。 除了上面描述/解决的那些假设之外,它还做出了一些假设,希望它有所帮助。

public static string CapitalizeFirstLetterInEachSentence(string sentences, bool capitalizeFirstSentence = true)
{
  bool capitalizeNextLetterOrDigit = capitalizeFirstSentence;
  char[] characters = sentences.ToCharArray();
  var len = characters.Length;

  for (int i = 0; i < len; i++)
  {
    var character = characters[i];
    switch (character)
    {
      case '.':
      case '?':
      case '!':
        capitalizeNextLetterOrDigit = true;
        continue;
    }
    
    if (capitalizeNextLetterOrDigit && char.IsLetterOrDigit(character))
    {
      capitalizeNextLetterOrDigit = false;
      characters[i] = char.ToUpper(character);
    }
  }
  return new string(characters);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM