2012-02-13 42 views
20

Bir ArrayList<String> sıralamak istiyorum ama sorun benim ana dil karakterlerim - alfabe şu şekilde: a, ą, b, c, č, d, e, f ... z, ž. Gördüğünüz gibi z karakteri sondan ikinci ve ą alfabede ikinci, bu yüzden dizimi sıraladıktan sonra yanlış sıralanır. Tüm ana dil karakterleri dizinin sonuna taşındı. Örnek:Java dizi sıralaması 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); 
     } 
    } 
} 

Çıktı:

Unsorted: 
bbc 
ąbc 
abc 
zzz 

Sorted: 
abc 
bbc 
zzz 
ąbc 

olmalı:

Sorted: 
abc 
ąbc 
bbc 
zzz 
+1

[Bu soru] bölümüne bakın (http://stackoverflow.com/questions/4225523/collator-doesnt-sort-right-for-given-locale) –

cevap

22

Sen Collator sınıfını kullanmalısınız. Sen yerel duyarlı dize karşılaştırmalar yapmak Collator kullanabilirsiniz

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

Ve Örneğin

için

sonra bu burster

Collections.sort(theList, lithuanianCollator); 
+0

Ülkem Litvanya ve dil Litvanyalı, ne yapmalıyım Çünkü eğer doğruysa, Dilim Locale sınıfı tarafından desteklenmiyor mu? – Minutis

+2

Bu yanıt doğru, ancak bir Karşılaştırıcı oluşturmaya gerek yok - Collator zaten bir Karşılaştırıcı örneğidir. Collections.sort (myList, Collator.getInstance (Locale.FRENCH)); kod tamamlandı. –

+1

'Collator' **, a-Karşılaştırıcı tarafından tasarlanmıştır. Başka bir "Karşılaştırıcı" oluşturmak gerekli değildir. –

5

kullanarak toplama sıralamak.

+0

Teşekkürler, ama yukarıdaki cevap daha gelişmiş, haklı olduğunu düşündüm. – Minutis