是否有一种简单的方法可以将字符串的第一个字母大写并降低其余部分?是否有内置方法或我需要自己制作?
TextInfo.ToTitleCase()
大写字符串的每个标记中的第一个字符.
如果不需要维护Acronym Uppercasing,那么您应该包括ToLower()
.
string s = "JOHN DOE"; s = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(s.ToLower()); // Produces "John Doe"
如果CurrentCulture不可用,请使用:
string s = "JOHN DOE"; s = new System.Globalization.CultureInfo("en-US", false).TextInfo.ToTitleCase(s.ToLower());
有关详细说明,请参阅MSDN链接.
CultureInfo.CurrentCulture.TextInfo.ToTitleCase("hello world");
String test = "HELLO HOW ARE YOU"; string s = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(test);
上面的代码不会工作.....
所以把下面的代码转换为低,然后应用函数
String test = "HELLO HOW ARE YOU"; string s = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(test.ToLower());
有些情况CultureInfo.CurrentCulture.TextInfo.ToTitleCase
无法处理,例如:撇号'
.
string input = CultureInfo.CurrentCulture.TextInfo.ToTitleCase("o'reilly, m'grego, d'angelo"); // input = O'reilly, M'grego, D'angelo
一个正则表达式也可以用\b[a-zA-Z]
一个字边界后,确定一个单词的起始字符\b
,那么我们只需要通过其上的情况下等价感谢更换匹配Regex.Replace(string input,string pattern,MatchEvaluator evaluator)
方法:
string input = "o'reilly, m'grego, d'angelo"; input = Regex.Replace(input.ToLower(), @"\b[a-zA-Z]", m => m.Value.ToUpper()); // input = O'Reilly, M'Grego, D'Angelo
在正则表达式可以根据需要,进行调整,例如,如果我们要处理MacDonald
和McFry
案件的正则表达式变为:(?<=\b(?:mc|mac)?)[a-zA-Z]
string input = "o'reilly, m'grego, d'angelo, macdonald's, mcfry"; input = Regex.Replace(input.ToLower(), @"(?<=\b(?:mc|mac)?)[a-zA-Z]", m => m.Value.ToUpper()); // input = O'Reilly, M'Grego, D'Angelo, MacDonald'S, McFry
如果我们需要处理更多前缀,我们只需要修改组(?:mc|mac)
,例如添加法语前缀du, de
:(?:mc|mac|du|de)
.
最后,我们可以意识到这个正则表达式也将匹配MacDonald'S
最后一个案例,'s
所以我们需要在正则表达式中处理它,背后是负面的(?.最后我们有:
string input = "o'reilly, m'grego, d'angelo, macdonald's, mcfry"; input = Regex.Replace(input.ToLower(), @"(?<=\b(?:mc|mac)?)[a-zA-Z](? m.Value.ToUpper()); // input = O'Reilly, M'Grego, D'Angelo, MacDonald's, McFry
Mc和Mac是美国的常见姓氏前缀,还有其他人.TextInfo.ToTitleCase不处理这些情况,不应该用于此目的.我是这样做的:
public static string ToTitleCase(string str) { string result = str; if (!string.IsNullOrEmpty(str)) { var words = str.Split(' '); for (int index = 0; index < words.Length; index++) { var s = words[index]; if (s.Length > 0) { words[index] = s[0].ToString().ToUpper() + s.Substring(1); } } result = string.Join(" ", words); } return result; }
ToTitleCase()应该适合你.
http://support.microsoft.com/kb/312890