34

ユーザーロケールごとに文字列のリストの下に並べ替えたい

List<String> words = Arrays.asList(
      "Äbc", "äbc", "Àbc", "àbc", "Abc", "abc", "ABC"
    );

ユーザーロケールが異なる場合、ソート出力はロケールごとに異なる必要があります。

ユーザーロケールごとに上記のリストをソートする方法は?

私は試した

Collections.sort(words , String.CASE_INSENSITIVE_ORDER);

しかし、これはローカリゼーションには機能していません。ロケールパラメーターを渡す方法、Collections.sort()または他の効率的な方法はありますか?

4

3 に答える 3

59

カスタム Comparator で並べ替えを使用できます。Collat​​or インターフェースを見る

Collator coll = Collator.getInstance(locale);
coll.setStrength(Collator.PRIMARY);
Collections.sort(words, coll);

Collections.sort(...)コレーターはコンパレーターであり、メソッドに直接渡すことができます。

于 2012-10-15T05:40:06.273 に答える
29

これはあなたが使うべきものだと思います-Collator

Collat​​or クラスは、ロケールに依存する文字列比較を実行します。このクラスを使用して、自然言語テキストの検索およびソート ルーチンを作成します。

コンパレータで次のようにします-

public int compare(String arg1, Sting arg2) {
    Collator usCollator = Collator.getInstance(Locale.US); //Your locale here
    usCollator.setStrength(Collator.PRIMARY);
    return usCollator.compare(arg1, arg2);
}

そして、コンパレータのインスタンスをCollections.sortメソッドに渡します。

アップデート

@Jan Dvorakが言ったように、それは実際にはコンパレータであるため、目的のロケールでインスタンスを作成し、強度を設定してソートメソッドに渡すことができます:

Collactor usCollator = Collator.getInstance(Locale.US); //Your locale here
usCollator.setStrength(Collator.PRIMARY); //desired strength
Collections.sort(yourList, usCollator);
于 2012-10-15T05:41:05.600 に答える