2014-10-17 11 views
9

Czy ktoś wie, jak zamówić tablicę ze słowami zawierającymi znaki specjalne, takie jak akcenty?Zamawianie tablicy ze znakami specjalnymi, takimi jak akcenty

Arrays.sort(anArray);

powraca 'Albacete' przed 'Álava' i chcę 'Álava' przed 'Albacete'.

dziękuję

+1

Musisz napisać własny "komparator" i przekazać go do 'Arrays.sort()'. Domyślnie ciągi są sortowane w oparciu o * Naturalne zamówienie *. – TheLostMind

Odpowiedz

10

Jeśli chcesz tylko do sortowania ciągi jakby nie mieli akcenty, można użyć następujących:

Collections.sort(strs, new Comparator<String>() { 
    @Override 
    public int compare(String o1, String o2) { 
     o1 = Normalizer.normalize(o1, Normalizer.Form.NFD); 
     o2 = Normalizer.normalize(o2, Normalizer.Form.NFD); 
     return o1.compareTo(o2); 
    } 
}); 

Powiązane pytanie:

Aby uzyskać bardziej wyrafinowane przypadki użycia, przeczytaj artykuł java.text.Collator. Oto przykład:

Collections.sort(strs, new Comparator<String>() { 
    @Override 
    public int compare(String o1, String o2) { 
     Collator usCollator = Collator.getInstance(Locale.US); 
     return usCollator.compare(o1, o2); 
    } 
}); 

Jeśli żaden z predefiniowanych reguł sortowania swoich potrzeb, można spróbować użyć java.text.RuleBasedCollator.

+0

(Zwróć uwagę, że możesz zmienić z 'Collections.sort' na' Arrays.sort', jeśli pracujesz z tablicami, a nie listami.) – aioobe

0

Należy przyjrzeć RuleBasedCollator

klasy RuleBasedCollator jest beton podklasa Collator że zapewnia prosty, opartych na danych, stół Collator. Z tą klasą możesz utworzyć niestandardowy Collator oparty na tabelach. RuleBasedCollator mapuje znaków do sortowania kluczy.

RuleBasedCollator posiada następujące ograniczenia dotyczące wydajności (inne podklasy mogą być wykorzystywane do bardziej skomplikowanych języków):

Jeśli specjalną regułę sortowania kontrolowane przez określono go dotyczy całego obiektu scalającego. Wszystkie niewymienione znaki to na końcu kolejności sortowania.