Я сейчас работаю с некоторыми данными на венгерском языке.Я должен отсортировать список строк венгров.
Согласно этой странице последовательности сортировки
Венгерский алфавитный порядок: 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 B BC Cs D Dz Dzs E É FG Gy HI Í JKL Ly MN Ny O Ó Ö Ő P (Q) RSSz T Ty U Ú Ü Ű V (W) (X) (Y) Z Zs
A считается отличным от Á
Игра с Сила с Collator
не меняет порядок вывода.А и А все еще перепутаны.
Существуют ли какие-либо библиотеки / приемы для сортировки списка строк в соответствии с венгерским алфавитным порядком?
Пока что я делаю:
- Сортировка с
Collator
, чтобы C / C, D, DZ, DZS ... были отсортированы правильно - Сортировка снова путем сравнения первых символов каждого слова на основе карты
Это выглядит слишком хлопотно для задачи №?
List<String> words = Arrays.asList(
"Árfolyam", "Az",
"Állásajánlatok","Adminisztráció",
"Zsfgsdgsdfg", "Qdfasfas"
);
final Map<String, Integer> map = new HashMap<String, Integer>();
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<String>(){
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;
}
});
Спасибо за ваш вклад