如何在C#中创建首字母大写

22 c#

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

例:

it is a text.  = It is a text.
Run Code Online (Sandbox Code Playgroud)

vik*_*tra 44

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);
}
Run Code Online (Sandbox Code Playgroud)

  • @Alastair,字符串是不可变的,但char数组不是. (5认同)
  • 你不需要做`source.ToCharArray()`.字符串已经是一个char数组,只能用`source [0]`索引. (2认同)
  • 我可以建议你写`if(string.IsNullOrEmpty(source))返回源;`而不是`string.Empty`?:d (2认同)

pol*_*nts 37

它会是这样的:

// precondition: before must not be an empty string

String after = before.Substring(0, 1).ToUpper() + before.Substring(1);
Run Code Online (Sandbox Code Playgroud)

  • @Danny:Substring使代码变得简单.我更喜欢先编写简单的代码,然后仅在必要时使用更复杂的代码进行优化*. (13认同)
  • .NET也很慢.C++或汇编程序要快得多.这是否意味着我们需要删除.NET并转向更快的语言? (2认同)

Jon*_*eet 18

polygenelubricants的答案适用于大多数情况,但您可能需要考虑文化问题.您是否希望在当前文化或特定文化中以文化不变的方式利用它?例如,它可以在土耳其产生重大影响.所以你可能想要考虑:

CultureInfo culture = ...;
text = char.ToUpper(text[0], culture) + text.Substring(1);
Run Code Online (Sandbox Code Playgroud)

或者如果您更喜欢以下方法String:

CultureInfo culture = ...;
text = text.Substring(0, 1).ToUpper(culture) + text.Substring(1);
Run Code Online (Sandbox Code Playgroud)

culture可能在哪里CultureInfo.InvariantCulture,或当前的文化等

有关此问题的更多信息,请参阅土耳其测试.


P-P*_*P-P 5

我使用这个变体:

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


Mir*_*nov 5

如果您确定该str变量有效(绝不是空字符串或 null),请尝试:

str = Char.ToUpper(str[0]) + str[1..];
Run Code Online (Sandbox Code Playgroud)

与使用 Substring 的其他解决方案不同,该解决方案不进行额外的字符串分配。这个例子基本上charReadOnlySpan<char>.

更新

实际上str[1..]返回字符串。根据文档,它在内部使用 Substring() 来执行此操作。https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca1831

为了使其免于分配,请使用以下行:

str = string.Concat(new ReadOnlySpan<char>(Char.ToUpper(str[0])), str.AsSpan()[1..]);
Run Code Online (Sandbox Code Playgroud)