【问题标题】:How to handle automatic character casing of names (first, last)? [duplicate]如何处理名称的自动字符大小写(第一个,最后一个)? [复制]
【发布时间】:2011-10-15 12:44:15
【问题描述】:

可能重复:
Does anyone have a good Proper Case algorithm

我目前处于不幸的境地,要求我使用正确的字符大小写显示作为批处理的一部分从各种来源(Excel、Access 等)加载的用户名称。

例如,如果名称加载为“JOHN DOE”,则应显示为“John Doe”。

很明显,这会很快变得非常复杂,比如麦当劳、奥莱利、勒布朗等等......

在研究这个问题时,我唯一能找到的建议是显示所有大写的名称,而这个解决方案比显示像 Mcdonald、O'reilly 和 Lebron 这样的名字更受欢迎。我仍然想确定我我已经完成了我的尽职调查,然后以“这就是你所能拥有的一切”回复他们。

是否有任何图书馆(开源或付费)可以帮助解决这个问题?我意识到它很可能不可能完美,但如果它可以覆盖 95~99% 的情况,那应该没问题。

提前致谢。

【问题讨论】:

  • 虽然这可能无法处理麦当劳/勒布朗的场景......
  • 如果没有特殊名字的字典,没有任何东西可以处理麦当劳/勒布朗的场景。

标签: c# regex user-interface string-formatting string-matching


【解决方案1】:

您可以查看 Perl 的 NameCase 模块,它就是这样做的。

【讨论】:

  • 谢谢,正是我想要的。它显然不会处理所有情况,但我不确定你能找到任何可行的方法。至少大部分情况都会被覆盖。
【解决方案2】:

您可以在 Globalization 命名空间中使用 TitleCase:

字符串 myName = "约翰·昆西公众"; System.Globalization.CultureInfocultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture; System.Globalization.TextInfo textInfo =cultureInfo.TextInfo; string convertName = textInfo.ToTitleCase(myName.ToLower()); Console.WriteLine(convertedName);

将制作“John Quincy Public”

它不会按照你想要的方式处理撇号。

【讨论】:

  • 通过查看 MSDN 文章中的 cmets,这将无法处理加载为全部大写的文本,不幸的是,它对我的​​场景无用...msdn.microsoft.com/en-us/library/…
  • 也许我没有关注,但上面的代码将“JOHN DOE”更改为“John Doe”(您的示例)。 ToTitleCase 忽略所有大写单词的奇怪之处是调用 ToLower() 的原因。
  • 哦,我的错,我没有看到“ToLower()”夹在里面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多