.NET FrameworkのメソッドはTextInfo.ToTitleCaseです。文字列をタイトルケースに変換する組み込みメソッド?
.NETコアに相当するものはありますか?
編集:.NETコアで組み込みのメソッドを探しています。
.NET FrameworkのメソッドはTextInfo.ToTitleCaseです。文字列をタイトルケースに変換する組み込みメソッド?
.NETコアに相当するものはありますか?
編集:.NETコアで組み込みのメソッドを探しています。
.NET標準2.0は、.NETのコア2.0でそれを使用することができますので、TextInfo.ToTitleCase(source)を追加しました。
ただし、.NET Core 1.xのサポートでは不運です。
独自の拡張メソッドを実装することができます
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);
}
}
クレジット:このgist * blatentlyコピーされたフォームを。
*頭文字のDotnet Fiddleのビットが追加されました。
これは "適切な"タイトルケーシングをしませんが、古い.netメソッドはどちらもしませんでした。 – mxmissile
OPはTextInfo.ToTitleCaseの代わりに_properタイトルのケーシング_の代わりを要求します。この答えは正しいです。また、うまくいく。 –
このソリューションは、ToTitleCaseが処理したすべてのケースを処理しません。私の解決策を見てください。 – DeadlyChambers
.NET Coreには、このようなメソッドが組み込まれていないようです。
残念ながら、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);
}
}
この解決法は頭字語を扱いませんhttps://dotnetfiddle.net/Suwfcg – DeadlyChambers
あなたの特定のニーズに対応している場合は、ToLower()メソッドを削除してみてください。 – silkfire
あなたは何を意味するのですか? ToLowerを削除すると、コンパイルエラーが発生します。 ToLowerとToUpperは私が見る唯一のオプションです。ここでも、この解決法は略語を扱いません。 – DeadlyChambers
私はこの記事から、他のソリューションが含まれているテストと拡張のためのgithubを作成し、dotnet fiddle。他のソリューションの出力内容を確認するには、行のコメントを外す必要があります。このソリューションは、思い付いたすべてのシナリオを網羅しています。 gitやフィドルのテストでこれらを確認することができます。私は非.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();
}
}
参照元のコードは次のとおりですが、自分のプロジェクトにコピーするのは簡単ではありません。しかし、あなたが試みることができるかもしれません。 http://referencesource.microsoft.com/#mscorlib/system/globalization/textinfo.cs,5f96501d72edadce –
[Transform string to title case]の重複可能性があります(http://stackoverflow.com/questions/23860116/transform-string- to-title-case) – Eser
@Eserは重複ではなく、Qは.NETコアとは関係ありません – mxmissile