2017-12-19 7 views
4

私は私の古いコードの一部をリファクタリングした後、私はいくつかの点でCharacter.toTitleCase()方法を使用のだとCharacter.toUpperCase()場合疑問に自分自身を助けることができなかったことが判明のほうがいい。Character.toUpperCase()とCharacter.toTitleCase(の違いは何ですか)

私はその説明を読み、任意の基本的な違いを見ていない:

toUpperCase

は UnicodeDataファイル内のケースマッピング情報を使用して大文字に文字 引数を変換します。 Character.isUpperCase(Character.toUpperCase(ch))は、一部の文字範囲、特に 記号または表意文字の場合は、常に がtrueを返すとは限りません。

一般に、文字を 大文字にマップするには、String.toUpperCase()を使用する必要があります。文字列の大文字と小文字のマッピング方法には、 文字の大文字と小文字のマッピング方法に比べていくつかの利点があります。文字列の大文字と小文字のマッピング方法は、 ではロケールに敏感なマッピング、文脈依存のマッピング、1:M の文字マッピングを実行できますが、文字の大文字と小文字のマッピング方法ではできません。

注:この方法では、補助文字は処理できません。 補助文字を含むすべてのUnicode文字をサポートするには、 toUpperCase(int)メソッドを使用します。

toTitleCase

UnicodeDataファイル内のケースマッピング 情報を使用して、文字引数をタイトルケースに変換します。文字に明示的な タイトルケースのマッピングがなく、それ自体が UnicodeDataのタイトルケースの文字でない場合、大文字のマッピングは同等の タイトルケースのマッピングとして返されます。 char引数がすでにタイトルケースの文字の場合は、 と同じchar値が返されます。文字の範囲によっては Character.isTitleCase(Character.toTitleCase(ch))が必ずしも を返すとは限りません。

注:この方法では、補助文字は処理できません。 補助文字を含むすべてのUnicode文字をサポートするには、 toTitleCase(int)メソッドを使用します。

それから私はこのようにそれらをテストしてみました:

public class Test { 
    public static void main(String... args) { 

    String originalString = "abcdefghijklmnopqrstuvwxyz123546-.,/*&%+"; 
    StringBuilder upperCaseStringBuilder = new StringBuilder(); 
    StringBuilder titleCaseStringBuilder = new StringBuilder(); 

    for (int i = 0; i < originalString.length(); i++) { 
     upperCaseStringBuilder.append(Character.toUpperCase(originalString.charAt(i))); 
     titleCaseStringBuilder.append(Character.toTitleCase(originalString.charAt(i))); 
    } 

    System.out.println("Original String : " + originalString); 
    System.out.println("UpperCase result: " + upperCaseStringBuilder.toString()); 
    System.out.println("TitleCase result: " + titleCaseStringBuilder.toString()); 
    } 
} 

これが出力されます。

Original String : abcdefghijklmnopqrstuvwxyz123546-.,/*&%+ 
UpperCase result: ABCDEFGHIJKLMNOPQRSTUVWXYZ123546-.,/*&%+ 
TitleCase result: ABCDEFGHIJKLMNOPQRSTUVWXYZ123546-.,/*&%+ 

だから私はこれらの2つの方法の違いを理解することができませんでした。私が前に言ったように、私はStringを大文字にするために私のコードにtoTitleCase()を使用しました。

私は考慮しなかったキーの違いはありますか?コードによっては、特殊なケースで予想外に動作する可能性がありますか?

+0

が文字のUnicodeDataに応じて明示的なタイトルケースマッピングを持っていないし、自分自身タイトルケース文字でない場合*」は、大文字のマッピングは同等のタイトルケースマッピングとして返されますされていません。ここに何かmore excitingです"*すでに十分クリア? – Tom

+0

@Tomは私のためではありません、申し訳ありません。 –

答えて

3

標準のASCII文字はとても退屈です!

System.out.println(Character.toTitleCase('dz')); // Dz 
System.out.println(Character.toUpperCase('dz')); // DZ 

Live demo.

+0

私は今それを見る、ありがとう。それは本当にエキサイティングです。 –

-1

私は本当にここに「本当の」違いがないと思うし、細かいことを考えすぎないほうがいいと思う。私はここに "問題"を助けるべきこの唯一の行を指摘したいと思う。

一般に、文字を大文字にマップするには、String.toUpperCase()を使用する必要があります。文字列の大文字と小文字のマッピング方法は、文字の大文字と小文字のマッピング方法に比べていくつ

ドキュメントString.toUpperCase()https://www.w3schools.com/jsref/jsref_touppercase.asp

彼らは内部情報の詳細を持っている場合、他の誰かがコメントしなければなりません。

関連する問題