如何大写名字

时间:2011-02-20 15:01:32

标签: c# .net

所以基本上如果我想从

转换一个名字
stephen smith 

Stephen Smith

我可以轻松地使用来自页面上的css,但理想情况下我想先抓住它并在数据库出来时更改它。我如何让csharp将字符串封顶。

有这个功能吗?

9 个答案:

答案 0 :(得分:62)

您可以使用System.Globalization.TextInfo类的ToTitleCase方法执行此操作:

CultureInfo cultureInfo   = Thread.CurrentThread.CurrentCulture;
TextInfo textInfo = cultureInfo.TextInfo;

Console.WriteLine(textInfo.ToTitleCase(title));
Console.WriteLine(textInfo.ToLower(title));
Console.WriteLine(textInfo.ToUpper(title));

答案 1 :(得分:26)

名字很棘手。 First Letter 的简单规则不适用。这里唯一的参议员方法是询问用户他们想要的方式。其他任何事都可能导致进攻。

如果我的名字是MacPhearson,ODowel,或者仅仅是marc,Marc甚至是mArC - 那么坦率地说:不管它。信任用户以使其正确。当你走进文化之间时,这会变得更加棘手。

答案 2 :(得分:4)

希望这会有所帮助:)...但请注意,如果您有许多字符串可以改变案例,那么这个过程很可能会很慢......

    string str = "to title case";
    Char[] ca = str.ToCharArray();

    foreach(Match m in Regex.Matches(str, @"\b[a-z]"))
    {
        ca[m.Index] = Char.ToUpper(ca[m.Index]);
    }
    Console.WriteLine(new string(ca));

更新或者你也可以使用自定义评估程序来改变这种情况:

    string str = "to title case";
    Console.WriteLine(Regex.Replace(str, @"\b[a-z]", delegate (Match m) 
                                                  {
                                                      return m.Value.ToUpper();
                                                  }
                      ));

注意在我的测试中,使用1,000,000次迭代时,第一种方法仅比使用评估者的方法快0.48秒(第一种方法需要6.88秒,后者需要7.36秒才能完成1,000,000次迭代)所以我不会考虑速度来选择......

答案 3 :(得分:2)

不,没有。如果您知道您正在处理的字符串是一个名称(或者,更好的说,是一系列以空格分隔的人名),您应该能够在一个for周期内使用Char.ToUpper自行编码。 。然而,有一个文化特定的案例,如名称中使用的阿拉伯语单词“bin”,“al”等,不应大写(使用拉丁语转录)。西方语言中的“von”或“van”也是如此。

更新:请注意,TextInfo.ToTitleCase 用于不同目的 - 它不打算将人名的首字母大写,而是提供适当的大小写标题(就像新闻文章的头条新闻一样)。

虽然.NET中的当前实现很容易满足所要求的目的,但我会避免这样做。原因是未来实施可能会发生重大变化,因此为人名制定自定义实施更安全。此外,我怀疑这种方法对于给定文化的字符串的标题 - 套管是否真的可用。例如,在捷克语("cs-CZ")中,正确的标题大小写应仅仅将第一个单词的第一个字母大写

答案 4 :(得分:1)

Pedro提供的答案略有延伸:

Regex.Replace(Name, @"(?:(M|m)(c)|(\b))([a-z])", delegate(Match m) { 
    return String.Concat(m.Groups[1].Value.ToUpper(), m.Groups[2].Value, m.Groups[3].Value, m.Groups[4].Value.ToUpper());
 });

除了标题案例之外,这将正确地利用McNames。例如     “simon mcguinnis” - > “Simon McGuinnis”

  • 第一个非捕获组将匹配任何分词符或“Mc”/“mc”。
  • 如果它与分词符合匹配,则组1和组2为空,组3包含该字符。
  • 如果匹配“Mc”或“mc”,则组1和组2包含“m”和“c”,组3为空。

    • 第1组(“m”或“M”)大写。
    • 第2组(“c”)保持不变。
    • 第3组(中断字符)保持不变。
    • 第4组(下一个单词的第一个字母)大写。

连接所有4个组(空或其他组)以生成返回字符串。

答案 5 :(得分:1)

对我来说,这个姓氏中有一个“人物”。

        if (Surname.Contains("'"))
        {
           String[] Names = Surname.Split('\'').ToArray();
           Surname = textInfo.ToTitleCase(Names[0].ToString());
           Surname += "''";
           Surname += textInfo.ToTitleCase(Names[1].ToString());
        }

答案 6 :(得分:1)

我使用单行:

topic_id

答案 7 :(得分:0)

这是字符串类的扩展方法,用于大写单个单词。您可以将其与str.Split()str.Join一起使用,以大写str字符串的每个单词。您可以添加对空字符串或一个字符长度字符串的检查。

public static string Capitalize(this string word)
{
    return word.Substring(0, 1).ToUpper() + word.Substring(1).ToLower();
}

答案 8 :(得分:-6)

视野

string titulo = "";

string result = System.Globalization.CultureInfo.TextInfo.ToLower(titulo);

然后应用css属性

text-transform = font-family: sans-serif;