[英]Built-in method to convert a string to title case in .NET Core?
您可以實現自己的擴展方法:
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);
}
}
信用:從這個要點*中公然復制。
*為首字母縮略詞Dotnet Fiddle添加了位。
.NET Core 似乎沒有內置這種方法。
.NET Standard 2.0 添加了TextInfo.ToTitleCase ( source ),因此您可以在 .NET Core 2.0 中使用它。
然而,對於 .NET Core 1.x 的支持,你就不走運了。
不幸的是,還是在 2016 年 10 月,.NET Core 還沒有為我們提供ToTitleCase
方法。
我自己創造了一個滿足我自己需求的產品。 您可以通過在正則表達式中添加自己的分隔符來調整它。 將_cultureInfo
替換為適用於您的CultureInfo
實例。
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 ,並創建了一個dotnet fiddle ,其中包含這篇文章中的其他解決方案。 您必須取消對行的注釋才能查看其他解決方案的輸出。 該解決方案涵蓋了所有想到的場景。 您可以在 git 或 fiddle 上的測試中驗證這些。 如果您想在非 .NET Core 中獲得與 TextInfo.ToTitleCase 類似的輸出,我建議您使用此解決方案。
public static class StringExtension
{
/// <summary>
/// Should capitalize the first letter of each word. Acronyms will stay uppercased.
/// Anything after a non letter or number will keep be capitalized.
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string ToTitleCase(this string str)
{
var tokens = str.Split(new[] { " " }, StringSplitOptions.None);
var stringBuilder = new StringBuilder();
for (var ti = 0; ti < tokens.Length; ti++)
{
var token = tokens[ti];
if (token == token.ToUpper())
stringBuilder.Append(token + " ");
else
{
var previousWasSeperator = false;
var previousWasNumber = false;
var ignoreNumber = false;
for (var i = 0; i < token.Length; i++)
{
if (char.IsNumber(token[i]))
{
stringBuilder.Append(token[i]);
previousWasNumber = true;
}
else if (!char.IsLetter(token[i]))
{
stringBuilder.Append(token[i]);
previousWasSeperator = true;
}
else if ((previousWasNumber && !ignoreNumber) || previousWasSeperator)
{
stringBuilder.Append(char.ToUpper(token[i]));
previousWasSeperator = false;
previousWasNumber = false;
}
else if (i == 0)
{
ignoreNumber = true;
stringBuilder.Append(char.ToUpper(token[i]));
}
else
{
ignoreNumber = true;
stringBuilder.Append(char.ToLower(token[i]));
}
}
stringBuilder.Append(" ");
}
}
return stringBuilder.ToString().TrimEnd();
}
}
這在.net核心中對我有用
public static string ToTitleCase(this string str)
{
try
{
var tokens = str.Split(new[] { " ", "-" }, StringSplitOptions.RemoveEmptyEntries);
string final = "";
for (var i = 0; i < tokens.Length; i++)
{
var token = tokens[i];
string first = token.Substring(0, 1);
string remaining = token.Substring(1, token.Length - 1);
final += first.ToUpper() + remaining.ToLower()+" ";
}
return final;
}
catch {
return "";
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.