2012-02-13 5 views
20

ArrayList<String>をソートしたいのですが、問題は母国語です - 私のアルファベットはa, ą, b, c, č, d, e, f ... z, žです。あなたはzの文字が最後から2番目で、ąがアルファベットで2番目であることを見てから、私の配列を並べ替えた後、それは間違って並べ替えられます。私のすべての母国語の文字は、配列の最後に移動されます。例:Java配列ソートUTF-8

package lt; 

import java.util.ArrayList; 
import java.util.Collections; 

public class test { 
    public static void main(String[] args) { 
     List<String> items = new ArrayList<>(); 
     items.add("bbc"); 
     items.add("ąbc"); 
     items.add("abc"); 
     items.add("zzz"); 

     System.out.println("Unsorted: "); 
     for(String str : items) { 
      System.out.println(str); 
     } 

     Collections.sort(items); 
     System.out.println(); 

     System.out.println("Sorted: "); 
     for(String str : items) { 
      System.out.println(str); 
     } 
    } 
} 

出力:

Unsorted: 
bbc 
ąbc 
abc 
zzz 

Sorted: 
abc 
bbc 
zzz 
ąbc 

は次のようになります。

Sorted: 
abc 
ąbc 
bbc 
zzz 
+1

[この質問を参照](http://stackoverflow.com/questions/4225523/collat​​or-doesnt-sort-right-for-given-locale) –

答えて

22

あなたはCollatorクラスを使用する必要があります。その後、例えば

Locale lithuanian = new Locale("lt_LT"); 
Collator lithuanianCollator = Collator.getInstance(lithuanian); 

、あなたは、ロケールに依存するStringのcomparisionsを行うためにCollatorを使用することができ、この丁合い

Collections.sort(theList, lithuanianCollator); 
+0

私の国はリトアニアで、言語はリトアニア語です。どうすればよいですか私が正しいとすれば、私の言語はLocaleクラスでサポートされていないからです。 – Minutis

+2

この回答は正しいですが、Comparatorを作成する必要はありません。Collat​​orはすでにComparatorのインスタンスです。 Collections.sort(myList、Collat​​or.getInstance(Locale.FRENCH));完全なコードです。 –

+1

'Collat​​or' **は設計上の' Comparator'です。別の「コンパレータ」を作成することは必要ありません。 –

5

を使用してコレクションを並べ替えます。

+0

ありがとうございます、しかし、上記の答えがより改善され、あなたが正しいと思った。 – Minutis