使字符串大写的第一个字母(具有最高性能)
我有一个带有TextBox
的DetailsView
,我希望输入的数据总是以首字母大写保存。
例:
"red" --> "Red"
"red house" --> " Red house"
我怎样才能达到这个最大化的表现 ?
注意 :
根据答案和答案下的评论,很多人认为这是要求将字符串中的所有单词大写。 Eg => Red House
它不是,但如果这是你想要的 ,找一个使用TitleInfo
的ToTitleCase
方法的答案。 (注意:对于实际提出的问题,这些答案不正确。)
请参阅TextInfo.ToTitleCase doc了解注意事项(不涉及全部大写的单词 - 它们被视为首字母缩写词;可能会在“不应”降低的单词中间显示小写字母,例如“McDonald”=>“Mcdonald”;不保证以处理所有针对文化的细微差别重新规则。)
注意 :
关于第一个字母后面的字母是否应该被迫小写,这个问题是模棱两可的。 接受的答案假定只有第一个字母应该被改变。 如果要强制除第一个字符串以外的字符串中的所有字母都是小写字母,请查找包含ToLower
且不包含ToTitleCase的答案。
编辑:更新到更新的语法(和更正确的答案)
public static string FirstCharToUpper(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
有效值。
public string FirstLetterToUpper(string str)
{
if (str == null)
return null;
if (str.Length > 1)
return char.ToUpper(str[0]) + str.Substring(1);
return str.ToUpper();
}
老答案:这使每个第一个字母大写
public string ToTitleCase(string str)
{
return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(str.ToLower());
}
正确的方法是使用文化:
Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(word.ToLower())
链接地址: http://www.djcxy.com/p/21027.html
上一篇: Make first letter of a string upper case (with maximum performance)