我目前正在处理一些匈牙利语的数据。我需要对一组匈牙利语字符串进行排序。
根据此排序序列页面的说明:
匈牙利字母顺序为: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=Á,...),所以在结果中,您可以使用排序器得到以下结果:
Abdffg
Ádsdfgsd
Aegfghhrf
到目前为止,没有问题 :)
但现在,我需要按匈牙利字母表排序
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
的Strength进行操作无法改变输出顺序。 A和Á仍然混淆。
是否有任何库/技巧可以根据匈牙利字母表对字符串列表进行排序?
到目前为止我所做的是:
- 使用
Collator
进行排序,以便正确排序C / Cs,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;
}
});
感谢您的输入
Collections.sort(words)
时,它会根据您的需求对它们进行排序,例如先是A,然后是Á... - maerics