25


2

文字列を タイトルケースにフォーマットするにはどうすればよいですか?

18 Answer


16


これはC#でこれを行うための単純な静的メソッドです。

public static string ToTitleCaseInvariant(string targetString){return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(targetString); }


13


Nitpickersの怒りをひきつけるリスクを冒してしまうようなシナリオでは、すべての空白先行単語を自動的に大文字にすることには用心深くなるでしょう。

私は少なくとも記事や接続詞のような例外的なケースのために辞書を実装することを検討するでしょう。 見なさい:

"美女と野獣"

そしてそれが固有名詞になると、事ははるかに醜くなります。


10


これがPerlのソリューションですhttp://daringfireball.net/2008/05/title_case

これがRubyのソリューションですhttp://frankschmitt.org/projects/title-case

これがRubyのワンライナーソリューションです。http://snippets.dzone.com/posts/show/4702

'ここに文字列' .gsub(/ \ b \ w /){$

ワンライナーがしていることは、各単語の先頭文字を大文字に置き換えた正規表現の使用です。


8


それを実現するには、例えば、C - ASCIIコード(http://www.asciitable.com/)を使ってcharの整数値を見つけ、それから32を引く。 _

a-zとA-Z以外の文字を受け入れる予定がある場合、これは悪い解決策です。

例えば、ASCII 134:å、ASCII 143:Åです。 算術演算を使うと、ASCII 102:fとなります。

ライブラリ呼び出しを使用してください。何か有用なものを取り戻すために、文字に整数演算を使用できると仮定しないでください。 Unicodeは trickyです。


6


Silverlightでは、 TextInfo`クラスに ToTitleCase`はありません。

これが簡単な正規表現ベースの方法です。

注:Silverlightにはコンパイル済みの正規表現はありませんが、私にとってこのパフォーマンスの低下は問題にはなりません。

    public string TitleCase(string str)
    {
        return Regex.Replace(str, @"\w+", (m) =>
        {
            string tmp = m.Value;
            return char.ToUpper(tmp[0]) + tmp.Substring(1, tmp.Length - 1).ToLower();
        });
    }


5


どの言語で?

PHPでは、

http://php.net/manual/en/function.ucwords.php[ucwords()]

例:

$ HelloWorld = ucwords( 'hello world');


5


あなたが使用している言語がサポートされているメソッド/関数を持っているなら、それを使ってください(C#の `ToTitleCase`メソッドのように)

そうでない場合は、次のようなことをしたいでしょう。

  1. 文字列を読む

  2. 最初の言葉を

  3. その単語の最初の文字を大文字にする^ 1 ^

  4. 進んで次の単語を探す

  5. 文字列の最後でない場合は3に進み、それ以外の場合は終了します。

^ 1 ^それを大文字にするには、Cのようにします。http://www.asciitable.com [ascii codes]を使ってcharの整数値を見つけ、それから32の整数値を引きます。

コードにはもっと有効なエラーチェック(有効な文字の確認など)が必要であり、 "Capitalize"関数は必要のない単語をチェックするために文字にある種の "title-case scheme"を課す必要があります。機能化される( 'and'、 'but’など Hereは良い方法です)


5


Javaでは、次のコードを使用できます。

public String titleCase(String str){char [] chars = str.toCharArray(); for(int i = 0; i <chars.length; i){if(i == 0){chars [i] = Character.toUpperCase(chars [i]);そうでなければ((i 1)<chars.lengthならば)


5


Perlの場合:

$ string =〜s /(\ w)/ \ u \ L $ 1 / g;

それはFAQにもあります。


4


エクセル風のPROPER:

パブリック静的文字列ExcelProper(文字列s){bool upper_needed = true; string result = ""; foreach(char c in s){bool is_letter = Char.IsLetter(c); if(is_letter)if(upper_needed)result = Char.ToUpper(c);それ以外の場合= Char.ToLower(c);それ以外の場合は= c。 upper_needed =!is_letter;結果を返します。 }