cch*_*son 11 java collation comparator
我现在正在与匈牙利人的一些数据工作.我必须对匈牙利语字符串列表进行排序.
匈牙利字母顺序为: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
Run Code Online (Sandbox Code Playgroud)
到这里,没问题:)
但现在,我要求按照匈牙利字母排序
AÁBCCs D Dz DzsEÉFGGyHIÍJKLLy MN NyOÓÖŐP(Q)RS Sz T Ty UUÜV(W)(X)(Y)Z Zs
A被认为与Á不同
使用强度来Collator改变输出中的顺序.A和Á仍然混在一起.
是否有根据匈牙利字母顺序对字符串列表进行排序的图书馆/技巧?
到目前为止我所做的是:
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;
}
});
Run Code Online (Sandbox Code Playgroud)
感谢您的输入
我发现了一个好主意,你可以使用RuleBasedCollator.
资料来源:http://download.oracle.com/javase/tutorial/i18n/text/rule.html
以下是匈牙利的规则:
< a,A < á,Á < b,B < c,C < cs,Cs,CS < d,D < dz,Dz,DZ < dzs,Dzs,DZS
< e,E < é,É < f,F < g,G < gy,Gy,GY < h,H < i,I < í,Í < j,J
< k,K < l,L < ly,Ly,LY < m,M < n,N < ny,Ny,NY < o,O < ó,Ó
< ö,Ö < ?,? < p,P < q,Q < r,R < s,S < sz,Sz,SZ < t,T
< ty,Ty,TY < u,U < ú,Ú < ü,Ü < ?,? < v,V < w,W < x,X < y,Y < z,Z < zs,Zs,ZS
Run Code Online (Sandbox Code Playgroud)