[code="java"]
System.out.println(Collator.getInstance(Locale.CHINA).compare("张大","张月"));
System.out.println(Collator.getInstance(Locale.CHINA).compare("张楠","张月"));
[/code]
打印结果如下:
-1
1
大是d开头,月是y开头,排序正确
楠是n开头,月是y开头,排序错误???怎么回事
首先,得懂得汉字字符的比较规则,是按拼音来的不假。但是,根本原因是因为编码表是按照拼音来的。以GB2312编码为例:
大码值 B4F3
楠码值 E9AA
月码值 D4C0
汉字不是按你想想的a-z排序的,可能是按Unicode或是别的什么吧,具体如何排的我也不太清楚,你可以查找一下资料。呵呵
首先,得懂得汉字字符的比较规则,是按拼音来的不假。但是,根本原因是因为编码表是按照拼音来的。以GB2312编码为例:
大码值 B4F3
楠码值 E9AA
月码值 D4C2
汉字中存在着许许多多的多音字情况,所以,按照拼音来排序,只是个相对的,并非一定是这样的。要较真的话,必须查看汉字在相应的编码集中码值。
Unicode 也是这个顺序:
大码值 5927
月码值 6708
楠码值 6960
所以,你得到如上的结果一点疑问也没有