我尝试了三种方法来获取所有CAPS字符串的ProperName解决方案。
这是我的代码:
string testStr = "SYNDEGAARD";
string result1 = UppercaseFirst(testStr);
string titleCase = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(testStr);
string result2 = titleCase;
CultureInfo culture_info = Thread.CurrentThread.CurrentCulture;
TextInfo text_info = culture_info.TextInfo;
string result3 = text_info.ToTitleCase(testStr);
private static string UppercaseFirst(string s)
{
// Check for empty string.
if (string.IsNullOrEmpty(s))
{
return string.Empty;
}
// Return char and concat substring.
return char.ToUpper(s[0]) + s.Substring(1);
}
所有三个结果均为“ SYNDENGAARD”。它永远不会更改为“ Syndengaard”。
答案 0 :(得分:2)
无法获得所需结果的原因是,如果输入字符串全部使用大写字母,则ToTitleCase()
不起作用。
您可以尝试将SYNDEGAARD
更改为SYNDEGAARDx
并查看区别。
我不确定为什么这是默认行为。
您还忘记在此函数中添加ToLower()
,以确保前面的文本为小写。
private static string UppercaseFirst(string s)
{
// Check for empty string.
if (string.IsNullOrEmpty(s))
{
return string.Empty;
}
// Return char and concat substring.
return char.ToUpper(s[0]) + s.Substring(1).ToLower(); // Missing ToLower()
}
编辑:
这就是为什么大写文本什么都没有发生的原因。
TextInfo.ToTitleCase Method (String)。
将指定的字符串转换为首字母大写( 完全是大写的,被认为是首字母缩写词。
答案 1 :(得分:1)
使用Humanizer,它将为您提供各种实用的转换工具,并处理字符串,枚举,日期,时间,时间跨度,数字和数量。
https://github.com/Humanizr/Humanizer
Nuget包裹
https://www.nuget.org/packages/Humanizer/
Var name = "shyam bhagat";
var titleCase = name.Humanize(LetterCasing.Title);
答案 2 :(得分:0)
只需更新
return char.ToUpper(s[0]) + s.Substring(1).ToLower();