小编典典

使字符串的首字母大写(具有最佳性能)

c#

我有DetailsView一个TextBox 和我想要的 输入数据始终保存 的第一个字母注册资本。

例:

"red" --> "Red"
"red house" --> " Red house"

我如何才能实现这种 最大化的性能


注意
根据答案和答案下的注释,许多人认为这是在问是否要大写字符串中的 所有 单词。例如=> Red House
,不是这样,但是如果您要寻找的是,请寻找 使用TextInfoToTitleCase方法的答案之一。(注意:这些答案对于实际提出的问题是
不正确 的。)
请注意TextInfo.ToTitleCase文档中的注意事项(不要触摸全部大写的单词-
它们被视为首字母缩写词;可以在单词中间以小写字母表示“不应”降低,例如“ McDonald” =>“
Mcdonald”;不保证处理所有特定于文化的细微之处重新大写规则。)



现在的问题是 含糊不清 ,是否后的第一个字母应该 被迫小写 。接受的答案假定 只应更改第一个字母 。如果您想强制
,除了第一个字符串中的所有字母 是小写,寻找一个答案包含ToLower不包含ToTitleCase


阅读 1402

收藏
2020-05-19

共1个答案

小编典典

更新到C#8

public static class StringExtensions
{
    public static string FirstCharToUpper(this string input) =>
        input switch
        {
            null => throw new ArgumentNullException(nameof(input)),
            "" => throw new ArgumentException($"{nameof(input)} cannot be empty", nameof(input)),
            _ => input.First().ToString().ToUpper() + input.Substring(1)
        };
}

C#7

public static class StringExtensions
{
    public static string FirstCharToUpper(this string input)
    {
        switch (input)
        {
            case null: throw new ArgumentNullException(nameof(input));
            case "": throw new ArgumentException($"{nameof(input)} cannot be empty", nameof(input));
            default: return input.First().ToString().ToUpper() + input.Substring(1);
        }
    }
}

真的是老答案

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

编辑
:此版本较短。为了获得更快的解决方案,请看一下Equiso的答案

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

编辑2 :最快的解决方案可能是达伦的解决方案(甚至有一个基准),尽管我会更改它的string.IsNullOrEmpty(s)验证以引发异常,因为最初的要求要求存在第一个字母,以便可以将其大写。请注意,此代码适用于通用字符串,而不适用于的有效值Textbox

2020-05-19