无法获得正确的ToTitleCase

时间:2018-08-02 02:45:25

标签: c# string

我尝试了三种方法来获取所有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”。

3 个答案:

答案 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();