我有一个带有文本框的DetailsView
我希望输入的数据总是以大写的第一个字母保存。
例子:
"red" --> "Red"
"red house" --> " Red house"
我怎样才能实现性能最大化呢?
注意:
Based on the answers and the comments under the answers, many people think this is asking about capitalizing all words in the string. E.g. => Red House It isn't, but if that is what you seek, look for one of the answers that uses TextInfo's ToTitleCase method. (Note: Those answers are incorrect for the question actually asked.)
See TextInfo.ToTitleCase documentation for caveats (doesn't touch all-caps words - they are considered acronyms; may lowercase letters in middle of words that "shouldn't" be lowered, e.g., "McDonald" → "Mcdonald"; not guaranteed to handle all culture-specific subtleties re capitalization rules.)
注意:
第一个字母之后的字母是否必须小写,这个问题很模糊。公认的答案假定只有第一个字母需要修改。如果要强制字符串中除第一个字母外的所有字母都小写,请查找包含ToLower且不包含ToTitleCase的答案。
我想提供一个“最大性能”的答案。在我看来,“最大性能”的答案抓住了所有的场景,并提供了解释这些场景的问题的答案。所以,这是我的答案。原因如下:
IsNullOrWhiteSpace accounts for strings that are just spaces or null/empty.
.Trim() removes white space from the front and back of the string.
.First() takes the first element of an IEnumerable<TSource> (or string).
We should check to see if it is a letter that can/should be uppercase.
We then add the rest of the string, only if the length indicates we should.
By .NET best practice, we should provide a culture under System.Globalization.CultureInfo.
Providing them as optional parameters makes this method totally reusable, without having to type the chosen culture every time.
I also noticed that my and most of these answers did not maintain the whitespace at the beginning of the string. This will also show how to maintain that whitespace.
//Capitalize the first letter disregard all chars using regex.
public static string RegCapString(this string instring, string culture = "en-US", bool useSystem = false)
{
if (string.IsNullOrWhiteSpace(instring))
{
return instring;
}
var m = Regex.Match(instring, "[A-Za-z]").Index;
return instring.Substring(0, m) + instring[m].ToString().ToUpper(new CultureInfo(culture, useSystem)) + instring.Substring(m + 1);
}
//Capitalize first char if it is a letter disregard white space.
public static string CapString(this string instring, string culture = "en-US", bool useSystem = false)
{
if (string.IsNullOrWhiteSpace(instring) ||
!char.IsLetter(instring.Trim().First()))
{
return instring;
}
var whiteSpaces = instring.Length - instring.TrimStart().Length;
return (new string(' ', whiteSpaces)) +
instring.Trim().First().ToString().ToUpper(new CultureInfo(culture, useSystem)) +
((instring.TrimStart().Length > 1) ? instring.Substring(whiteSpaces + 1) : "");
}