当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在C#中将名字和姓氏的首字母大写?》经验,为你挑选了6个好方法。

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



1> ageektrapped..:

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链接.


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

2> Nathan Baulc..:
CultureInfo.CurrentCulture.TextInfo.ToTitleCase("hello world");



3> 小智..:
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());



4> polkduran..:

有些情况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

正则表达式可以根据需要,进行调整,例如,如果我们要处理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

如果我们需要处理更多前缀,我们只需要修改组(?: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



5> Jamie Ide..:

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;
    }



6> ckal..:

ToTitleCase()应该适合你.

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

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有