在.NET Core中将字符串转换为标题大小写的内置方法?

问题描述 投票:15回答:5

.NET Framework有一个方法TextInfo.ToTitleCase

在.NET Core中有相同的东西吗?

编辑:我正在寻找.NET Core中的内置方法。

c# .net-core
5个回答
6
投票

.NET Standard 2.0添加了TextInfo.ToTitleCasesource),因此您可以在.NET Core 2.0中使用它。

但是,对于.NET Core 1.x支持,你运气不好。


25
投票

您可以实现自己的扩展方法:

public static class StringHelper
{
    public static string ToTitleCase(this string str)
    {
        var tokens = str.Split(new[] { " ", "-" }, StringSplitOptions.RemoveEmptyEntries);
        for (var i = 0; i < tokens.Length; i++)
        {
            var token = tokens[i];
            tokens[i] = token == token.ToUpper()
                ? token 
                : token.Substring(0, 1).ToUpper() + token.Substring(1).ToLower();
        }

        return string.Join(" ", tokens);
    }
}

信用:从这个qazxsw poi *公然抄袭。

*添加了缩写gist的位。


10
投票

似乎.NET Core中没有内置的这种方法。


2
投票

不幸的是,仍然在2016年10月,.NET Core没有为我们提供Dotnet Fiddle方法。

我自己创造了一个适合我自己需要的东西。您可以通过将自己的分隔符添加到正则表达式来进行调整。将ToTitleCase替换为适用于您的_cultureInfo实例。

CultureInfo

1
投票

我为测试扩展创建了一个public static class TextHelper { private static readonly CultureInfo _cultureInfo = CultureInfo.InvariantCulture; public static string ToTitleCase(this string str) { var tokens = Regex.Split(_cultureInfo.TextInfo.ToLower(str), "([ -])"); for (var i = 0; i < tokens.Length; i++) { if (!Regex.IsMatch(tokens[i], "^[ -]$")) { tokens[i] = $"{_cultureInfo.TextInfo.ToUpper(tokens[i].Substring(0, 1))}{tokens[i].Substring(1)}"; } } return string.Join("", tokens); } } ,并且包含了本文中其他解决方案的github。您必须取消对线路的注释才能看到其他解决方案输出的内容。此解决方案涵盖了所有想到的场景。您可以在git或小提琴的测试中验证这些。如果你想在非.NET Core中获得与TextInfo.ToTitleCase相似的输出,我建议你使用这个解决方案。

dotnet fiddle
© www.soinside.com 2019 - 2024. All rights reserved.