1. ホーム
  2. c#

[解決済み] C# で各単語の最初の文字、または文字列全体の最初の文字を大文字にするにはどうすればよいですか?

2023-03-01 23:50:07

質問

独自のアルゴリズムを書くこともできますが、次のようなものが必要だと感じています。 ルビーのヒューマナイズ に相当するものがC#にあるはずです。

ググってみましたが、日付をヒューマナイズする方法しか見つかりませんでした。

例を挙げます。

  • Lorem Lipsum Et" を "Lorem lipsum et" に変更する方法です。
  • "Lorem lipsum et" を "Lorem Lipsum Et" に変換する方法。

どのように解決するのですか?

のコメントで述べられているように @miguel さんの回答 を使用することができます。 TextInfo.ToTitleCase これは.NET 1.1以降で利用可能です。以下は、あなたの例に対応するいくつかのコードです。

string lipsum1 = "Lorem lipsum et";

// Creates a TextInfo based on the "en-US" culture.
TextInfo textInfo = new CultureInfo("en-US",false).TextInfo;

// Changes a string to titlecase.
Console.WriteLine("\"{0}\" to titlecase: {1}", 
                  lipsum1, 
                  textInfo.ToTitleCase( lipsum1 )); 

// Will output: "Lorem lipsum et" to titlecase: Lorem Lipsum Et

LOREM LIPSUM ET"のようにすべて大文字のものは無視されます。これは、頭字語がテキスト中にある場合、"IEEE" (Institute of Electrical and Electronics Engineers) が "iee" や "Ieee" にならないよう、大文字小文字の区別をしているからです。

しかし、最初の文字だけを大文字にしたい場合は、次のような解決策を取ることができます。 ここで ... あるいは、文字列を分割して、リストの最初のものを大文字にすることができます。

string lipsum2 = "Lorem Lipsum Et";

string lipsum2lower = textInfo.ToLower(lipsum2);

string[] lipsum2split = lipsum2lower.Split(' ');

bool first = true;

foreach (string s in lipsum2split)
{
    if (first)
    {
        Console.Write("{0} ", textInfo.ToTitleCase(s));
        first = false;
    }
    else
    {
        Console.Write("{0} ", s);
    }
}

// Will output: Lorem lipsum et