7
Androidで国際文字列を正しく並べ替える方法はありますか?カスタムコンパレータを使用し、compareTo()
メソッドを使用しますが、それだけでは不十分です。私はこの "ö"のような文字を "o"の近くに表示したいが、それらはすべてリストの最後にある。コンパイラに「o、a、...など」と似ていると考えるようにするにはどうすればよいですか?Androidで特殊文字を比較する
Androidで国際文字列を正しく並べ替える方法はありますか?カスタムコンパレータを使用し、compareTo()
メソッドを使用しますが、それだけでは不十分です。私はこの "ö"のような文字を "o"の近くに表示したいが、それらはすべてリストの最後にある。コンパイラに「o、a、...など」と似ていると考えるようにするにはどうすればよいですか?Androidで特殊文字を比較する
ロケールに敏感な文字列を使用すると、Collator
が使用されます。 docs:
ロケール依存文字列比較を実行します。具体的なサブクラスである RuleBasedCollatorを使用すると、照合順序のカスタマイズを によって行うことができます。比較ストリングの
例:
Collator deCollator = Collator.getInstance(Locale.GERMANY); // or new Locale("pl", "PL") for polish locale ;)
System.out.println(deCollator.compare("abcö", "abco"));
プリント1
。
あなたはコレータの上使用して文字列のリストをソートしたい場合は、あなたが書くことができます。
final List<String> strings = Arrays.asList(
"über", "zahlen", "können", "kreativ", "Äther", "Österreich");
Collections.sort(strings, deCollator); // Collator implements Comparator
System.out.println(strings);
プリント:
[Äther, können, kreativ, Österreich, über, zahlen]
編集:ちょうどあなたがポーランドであることを発見しました、ポーランドの例を以下に示します:
final List<String> strings = Arrays.asList(
"pięć", "piec", "Pieczka", "pięść", "pieczęć", "pieczątka");
Collections.sort(strings, Collator.getInstance(new Locale("pl", "PL")));
System.out.println(strings);
// output: [piec, pieczątka, pieczęć, Pieczka, pięć, pięść]
あなたの素晴らしい答えをありがとう! ;)実際、私はもっと簡単な解決策を見つけました: 'Collator collator = Collator.getInstance(); collator.setDecomposition(Collator.CANONICAL_DECOMPOSITION); collator.compare(one、two) 'ここでの2番目の例は、CANONICAL_DECOMPOSITIONルールの動作を示しています。http://developer.android.com/reference/java/text/Collator.html – lomza
Collator.getInstance ) '明示的な' Locale'が環境依存でない場合、**ユーザのデフォルトロケール**に適したCollatorインスタンスを返します。 「[デフォルトのロケールに注意してください](http://developer.android.com/reference/java/util/Locale.html#default_locale)」._ – Xaerxess
警告をありがとうございますが、今は疑いがあります。ソートされたデータは、ユーザーに表示するためだけに、どこかに送信したり、何かを計算したりする必要がありません。おそらくデフォルトのロケールで十分でしょうか?しかし、私がドイツ語とデンマーク語の文字を正しくソートして機械出力として使用したいのであれば、最良の選択は 'Local.US'ロケールを使うことでしょうか? – lomza