В настоящее время я работаю с некоторыми данными на венгерском языке. У меня есть отсортировать список венгерских строк.
Согласно эта страница последовательности сопоставления
венгерский алфавитный порядок следующий: A = Á, B, C, CS, D, DZ, DZS, E = É, F, G, GY , H, I = Í, J, K, L, LY, M, N, NY, O = Ó, Ö = Ő, P, Q, R, S, SZ, T, TY, U = Ú, Ü = Ű, V, W, X, Y, Z, ZS
Таким образом, гласные трактуются одинаково (A = Á, ...), так что в результате вы можете получить что-то подобное, используя Collator :
Abdffg
Ádsdfgsd
Aegfghhrf
До сих пор без проблем :)
Но теперь у меня есть требование сортировать согласно венгерскому алфавит
A Á BC Cs D Dz Dzs E É FG Gy HI Í JKL Ly MN Ny O Ó Ö Ő P (Q) RS Sz T Ty U Ú Ü Ű V (W) (X) ( Y) Z Zs
A считается отличным от Á
Игра с Strength из Collator
не меняет порядок на выходе. A и Á все еще перепутались.
Есть ли какие-нибудь библиотеки / уловки для сортировки списка строк в соответствии с венгерским алфавитным порядком?
На данный момент я делаю следующее:
Collator
, чтобы C / Cs, D, DZ, DZS ... отсортированы правильно Выглядит слишком хлопотно для задачи нет?
List words = Arrays.asList(
"Árfolyam", "Az",
"Állásajánlatok","Adminisztráció",
"Zsfgsdgsdfg", "Qdfasfas"
);
final Map map = new HashMap();
map.put("A",0);
map.put("Á",1);
map.put("E",2);
map.put("É",3);
map.put("O",4);
map.put("Ó",5);
map.put("Ö",6);
map.put("Ő",7);
map.put("U",8);
map.put("Ú",9);
map.put("Ü",10);
map.put("Ű",11);
final Collator c = Collator.getInstance(new Locale("hu"));
c.setStrength(Collator.TERTIARY);
Collections.sort(words, c);
Collections.sort(words, new Comparator(){
public int compare(String s1, String s2) {
int f = c.compare(s1,s2);
if (f == 0) return 0;
String a = Character.toString(s1.charAt(0));
String b = Character.toString(s2.charAt(0));
if (map.get(a) != null && map.get(b) != null) {
if (map.get(a) < map.get(b)) {
return -1;
}
else if (map.get(a) == map.get(b)) {
return 0;
}
else {
return 1;
}
}
return 0;
}
});
Спасибо за ваш вклад