【问题标题】:How to make a first letter capital in C#如何在C#中使首字母大写
【发布时间】:2011-03-29 07:18:23
【问题描述】:

如何将文本中的第一个字母设置为大写?

例子:

it is a text.  = It is a text.

【问题讨论】:

  • 字符串可以是"99c waffles" 之类的东西,而你想得到"99c Waffles" 吗?也就是说,你对“首字母”的定义是什么?

标签: c#


【解决方案1】:
public static string ToUpperFirstLetter(this string source)
{
    if (string.IsNullOrEmpty(source))
        return string.Empty;
    // convert to char array of the string
    char[] letters = source.ToCharArray();
    // upper case the first char
    letters[0] = char.ToUpper(letters[0]);
    // return the array made of the new char array
    return new string(letters);
}

【讨论】:

  • 你不需要做source.ToCharArray()。字符串已经是一个 char 数组,可以仅使用 source[0] 进行索引。
  • @Alastair,字符串是不可变的,但 char 数组不是。
  • @Jacob,哦,是的。显示周五下午我的大脑有多死:/
  • 我可以建议你写if (string.IsNullOrEmpty(source)) return source;而不是string.Empty吗? :D
  • 并将方法从ToUpperFirstLetter重命名为ToUpperFirstCharacter,这是一个更相关的名称:)
【解决方案2】:

会是这样的:

// precondition: before must not be an empty string

String after = before.Substring(0, 1).ToUpper() + before.Substring(1);

【讨论】:

  • @Danny:让我们在这里讨论您的评论stackoverflow.com/questions/3474578/…
  • .NET 也很慢。 C++ 或汇编程序要快得多。这是否意味着我们需要放弃 .NET 并转向更快的语言?
  • @Danny:子字符串使代码变得简单。我更喜欢先编写简单的代码,然后仅在必要时使用更复杂的代码进行优化
【解决方案3】:

如果您使用的是 C#,请尝试以下代码:

Microsoft.VisualBasic.StrConv(sourceString, Microsoft.VisualBasic.vbProperCase)

【讨论】:

  • 这很难看。如果您使用 C#,为什么要导入/引用 Visual Basic DLL?
  • @steven:您可以使用 C# 中的 VB 库。
  • Microsoft.VisualBasic.Strings.StrConv("hello", VbStrConv.ProperCase);
  • 还是错了。这将每个单词都大写,而不仅仅是第一个单词。这是正在运行的 VB 函数Try it online!
【解决方案4】:
text = new String(
    new [] { char.ToUpper(text.First()) }
    .Concat(text.Skip(1))
    .ToArray()
);

【讨论】:

  • @Jon Skeet - 这完全是我的意图 :) 我实际上想知道与上面的 substring 方法相比性能如何。
【解决方案5】:

polygenelubricants 的回答在大多数情况下都很好,但您可能需要考虑文化问题。您希望在当前文化或特定文化中以文化不变的方式将其大写吗?例如,它可以在土耳其产生重大影响。所以你可能要考虑:

CultureInfo culture = ...;
text = char.ToUpper(text[0], culture) + text.Substring(1);

或者如果您更喜欢String 上的方法:

CultureInfo culture = ...;
text = text.Substring(0, 1).ToUpper(culture) + text.Substring(1);

其中culture 可能是CultureInfo.InvariantCulture,或当前文化等。

有关此问题的更多信息,请参阅Turkey Test

【讨论】:

  • 考虑不同的CultrueInfos,以及TextInfos。
  • 告诉我在 C#.net 上工作时最需要导入 Microsoft.VisualBasic dll 的情况
  • 考虑到“CultureInfo”使解决方案变得完美......也非常感谢土耳其测试:)
【解决方案6】:

我意识到这是一个旧帖子,但是我最近遇到了这个问题并用以下方法解决了。

    private string capSentences(string str)
    {
        string s = "";

        if (str[str.Length - 1] == '.')
            str = str.Remove(str.Length - 1, 1);

        char[] delim = { '.' };

        string[] tokens = str.Split(delim);

        for (int i = 0; i < tokens.Length; i++)
        {
            tokens[i] = tokens[i].Trim();

            tokens[i] = char.ToUpper(tokens[i][0]) + tokens[i].Substring(1);

            s += tokens[i] + ". ";
        } 

        return s;
    }

在下面的示例中,单击按钮会执行这个简单的代码outBox.Text = capSentences(inBox.Text.Trim());,它会在上面的方法运行后从上框中提取文本并将其放入下框中。

【讨论】:

    【解决方案7】:

    static String UppercaseWords(String BadName) { 字符串全名 = "";

            if (BadName != null)
            {
                String[] FullBadName = BadName.Split(' ');
                foreach (string Name in FullBadName)
                {
                    String SmallName = "";
                    if (Name.Length > 1)
                    {
                        SmallName = char.ToUpper(Name[0]) + Name.Substring(1).ToLower();
                    }
                    else
                    {
                        SmallName = Name.ToUpper();
                    }
                    FullName = FullName + " " + SmallName;
                }
    
            }
            FullName = FullName.Trim();
            FullName = FullName.TrimEnd();
            FullName = FullName.TrimStart();
            return FullName;
        }
    

    【讨论】:

      【解决方案8】:

      试试这个代码 sn-p:

      char nm[] = "this is a test";
      
      if(char.IsLower(nm[0]))  nm[0] = char.ToUpper(nm[0]);
      
      //print result: This is a test
      

      【讨论】:

      • char[] nm = "这是一个测试".ToCharArray();会工作
      【解决方案9】:

      这个函数使大写成为字符串中所有单词的首字母

      public static string FormatSentence(string source)
          {
              var words = source.Split(' ').Select(t => t.ToCharArray()).ToList();
              words.ForEach(t =>
              {
                  for (int i = 0; i < t.Length; i++)
                  {
                      t[i] = i.Equals(0) ? char.ToUpper(t[i]) : char.ToLower(t[i]);
                  }
              });
              return string.Join(" ", words.Select(t => new string(t)));;
          }
      

      【讨论】:

        【解决方案10】:

        我使用这个变体:

         private string FirstLetterCapital(string str)
                {
                    return Char.ToUpper(str[0]) + str.Remove(0, 1);            
                }
        

        【讨论】:

          【解决方案11】:

          从单词中取出第一个字母,然后将其提取到另一个字符串中。

          strFirstLetter = strWord.Substring(0, 1).ToUpper();
          strFullWord = strFirstLetter + strWord.Substring(1);
          

          【讨论】:

            【解决方案12】:
            string str = "it is a text";
            

            //首先使用.Trim()方法去掉开头和结尾所有不必要的空格,例如("This string".Trim()会输出"This string")。

            str = str.Trim();
            

            char theFirstLetter = str[0]; // 这一行是在索引 0 处取字符串的第一个字母。

            theFirstLetter.ToUpper(); // .ToTupper() 方法将首字母大写。

            str = theFirstLetter + str.substring(1); // 我们添加我们大写的第一个字母并添加字符串的其余部分,使用 str.substring(1) (str.substring(1) 跳过索引 0 处的第一个字母并且只打印从索引 1 到最后一个索引的字母。) Console.WriteLine(str); // 现在应该输出“It is a text”

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-06-06
              • 1970-01-01
              • 2021-07-29
              • 2011-05-14
              • 1970-01-01
              • 2011-08-19
              • 2020-08-09
              • 2011-11-13
              相关资源
              最近更新 更多