如何在C#中将名字和姓氏的首字母大写?

Mik*_*osa 139 c# string capitalize

是否有一种简单的方法可以将字符串的第一个字母大写并降低其余部分?是否有内置方法或我需要自己制作?

age*_*ped 257

TextInfo.ToTitleCase()大写字符串的每个标记中的第一个字符.
如果不需要维护Acronym Uppercasing,那么您应该包括ToLower().

string s = "JOHN DOE";
s = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(s.ToLower());
// Produces "John Doe"
Run Code Online (Sandbox Code Playgroud)

如果CurrentCulture不可用,请使用:

string s = "JOHN DOE";
s = new System.Globalization.CultureInfo("en-US", false).TextInfo.ToTitleCase(s.ToLower());
Run Code Online (Sandbox Code Playgroud)

有关详细说明,请参阅MSDN链接.

  • @roosa - 轻松修复ToTitleCase(val.ToLower()) (25认同)
  • 这里需要注意的一点是,如果字符串是全部大写字母,它就不起作用.它认为所有大写字母都是首字母缩略词. (24认同)
  • 与下面的Nathan的答案不同,我得到一个错误:"不幸的是,非静态字段,方法或属性需要对象引用......." (13认同)
  • 我见过很多这样的事情是你不能依赖它们.如果这个名字像麦凯恩那样,或者如果你开始打更多的外国名字,那就不行了. (9认同)

Nat*_*lch 118

CultureInfo.CurrentCulture.TextInfo.ToTitleCase("hello world");
Run Code Online (Sandbox Code Playgroud)


小智 30

String test = "HELLO HOW ARE YOU";
string s = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(test);
Run Code Online (Sandbox Code Playgroud)

上面的代码不会工作.....

所以把下面的代码转换为低,然后应用函数

String test = "HELLO HOW ARE YOU";
string s = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(test.ToLower());
Run Code Online (Sandbox Code Playgroud)


pol*_*ran 14

有些情况CultureInfo.CurrentCulture.TextInfo.ToTitleCase无法处理,例如:撇号'.

string input = CultureInfo.CurrentCulture.TextInfo.ToTitleCase("o'reilly, m'grego, d'angelo");
// input = O'reilly, M'grego, D'angelo
Run Code Online (Sandbox Code Playgroud)

一个正则表达式也可以用\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
Run Code Online (Sandbox Code Playgroud)

正则表达式可以根据需要,进行调整,例如,如果我们要处理MacDonaldMcFry案件的正则表达式变为:(?<=\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
Run Code Online (Sandbox Code Playgroud)

如果我们需要处理更多前缀,我们只需要修改组(?:mc|mac),例如添加法语前缀du, de:(?:mc|mac|du|de).

最后,我们可以意识到这个正则表达式也将匹配MacDonald'S最后一个案例,'s所以我们需要在正则表达式中处理它,背后是负面的(?<!'s\b).最后我们有:

string input = "o'reilly, m'grego, d'angelo, macdonald's, mcfry";
input = Regex.Replace(input.ToLower(), @"(?<=\b(?:mc|mac)?)[a-zA-Z](?<!'s\b)", m => m.Value.ToUpper());
// input = O'Reilly, M'Grego, D'Angelo, MacDonald's, McFry
Run Code Online (Sandbox Code Playgroud)


Jam*_*Ide 7

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


cka*_*kal 5

ToTitleCase()应该适合你.

http://support.microsoft.com/kb/312890