Jak można poprawnie posortować tablicę wyrazów z polskimi literami? Arrays.sort(tablica) ustawia polskie znaki na końcu:-(
package test;
import java.text.Collator;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Locale;
public class BlowupTest {
public static void main(String[] args) {
String[] arr = {
"ąłć", "ąlc", "ąłc", "alc", "buhuhuhu"
};
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
Collator c = Collator.getInstance(new Locale("pl", "PL"));
return c.compare(s1, s2);
}
});
System.out.println(Arrays.deepToString(arr));
}
}
Dziękuję bardzo za szybką odpowiedź i super rozwiązanie!!!
Wlasciwie to lepiej tak:
Arrays.sort(arr, new Comparator<String>() {
private Collator c = Collator.getInstance(new Locale("pl", "PL"));
@Override
public int compare(String s1, String s2) {
return c.compare(s1, s2);
}
});
Collator implementuje Comparator :)
Arrays.sort(arr, Collator.getInstance(new Locale("pl", "PL")));
Zamiast new Locale("pl", "PL")
można użyć Locale.getDefault()
Jest to o tyle lepsze, że zawsze sortuje się zawsze zgodnie z ustawieniem lokalizacyjnym systemu operacyjnego. Program jako taki nie musi się więc zupełnie zajmować kwestią lokalizacji w kontekście sortowania. Jeżeli aplikacja z użyciem tej metody zostanie odpalona z cyrylicą na bułgarskim komputerze, to też będzie poprawnie sortować bułgarskie napisy mimo braku uwzględnienia w programie lokalizacji bułgarskiej. Podobnie jeżeli w przyszłości powstanie nowy system operacyjny i/lub nowa, nie istniejącą wcześniej lokalizacja, alfabet i/lub reguły sortowania - program nadal będzie sortował poprawnie.