如何使名字大写

所以基本上如果我想改变一个名字

stephen smith 

 Stephen Smith 

我可以很容易地做到这一点与CSS来的页面,但理想情况下,我想赶上它,并改变它出来的数据库时。 我怎么能得到csharp captialize一个string。

有这个function吗?

您可以使用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)); 

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

如果我的名字是MacPhearson,ODowel,或者只是马克,Marc或者甚至是mArC – 那么坦率地说:不要pipe它。 相信用户是正确的。 在文化之间,这变得更加棘手。

希望这有助于:)…但请注意,如果你有很多很多的string来改变大小写,这个过程很可能会很慢。

  string str = "to title case"; Char[] ca = str.ToCharArray(); foreach(Match m in Regex.Matches(str, @"\b[az]")) { ca[m.Index] = Char.ToUpper(ca[m.Index]); } Console.WriteLine(new string(ca)); 

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

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

请注意 ,在我进行的1,000,000次迭代testing中,第一种方法仅比评估程序快了0.48秒(第一种方法花了6.88秒,后者花了7.36秒来完成1,000,000次迭代),所以我不会考虑速度select…

不,没有。 如果你知道你正在处理的string是一个名字(或者更好的说,是一个由空格分隔的人名序列),你应该可以自己编写一个循环,并使用Char.ToUpper 。 但是,在名称中使用的阿拉伯词“bin”,“al”等文化特定的情况不应该大写(使用拉丁语转录)。 西方语言的“冯”或“范”也是如此。

更新:请注意, TextInfo.ToTitleCase 服务于不同的目的 – 它不打算大写人名的第一个字母,但提供正确的标题 (如新闻文章的标题清晰)。

虽然目前在.NET中的实现可以很容易地达到要求的目的,我会避免这样做。 原因是未来的实现可能会发生重大变化,因此为人名定制实现更为安全。 而且,我怀疑这个方法对于给定的文化来说是否真的可以用于string的封装。 例如,在捷克语( "cs-CZ" )中,正确的标题情况应该仅仅利用第一个字的第一个字母。

Pedro提供的答案略有扩展:

 Regex.Replace(Name, @"(?:(M|m)(c)|(\b))([az])", 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个组,空的或其他,连接在一起产生返回string。

这对我来说是有效的。

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

这是string类中的一个扩展方法,用大写单词。 你可以使用它和str.Split()str.Join一起使用strstring的每个字。 您可以添加对空字符或一个字符长度string的检查。

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

在视图中

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

然后申请CSS属性

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