这里举例List集合 , 对list中的中文进行排序 , 按照中文拼音首字母.
支持生僻汉字的话 , 需要使用一个jar包 , 链接地址如下
传统的 :
List list = new ArrayList();
list.add("一鸣惊人 -Y");
list.add("人山人海 -R");
list.add("海阔天空 -H");
list.add("空前绝后 -K");
list.add("后来居上 -H");
Comparator cmp = java.text.Collator.getInstance(java.util.Locale.CHINA);
Collections.sort(list, cmp);
for (String str : list) {
System.out.println(str);
}输出结果:
海阔天空 -H
后来居上 -H
空前绝后 -K
人山人海 -R
一鸣惊人 -Y
这种看上去没有什么问题 , 但是换上生僻字之后 , 就会出现错误.
比如这样子:
List list1 = new ArrayList();
list1.add("网易汽车 - W");
list1.add("新民汽车网 - X");
list1.add("钛媒体 - T");
list1.add("瘾科技 - Y");
list1.add("昕薇网 - X");
list1.add("安倍 - A");
list1.add("中国 - Z");
list1.add("中心 - Z");
Comparator cmp = java.text.Collator.getInstance(java.util.Locale.CHINA);
Collections.sort(list1, cmp);
for (String str : list1) {
System.out.println(str);
}输出结果:
安倍 - A
网易汽车 - W
新民汽车网 - X
中国 - Z
中心 - Z
昕薇网 - X
钛媒体 - T
瘾科技 - Y
这个结果就是错误的 , "钛媒体 - T" 应该在第二位...
解决方案 :
使用 "com.ibm.icu.text.Collator" 替换 "java.text.Collator"
使用 "com.ibm.icu.util.ULocale.SIMPLIFIED_CHINESE" 替换 "java.util.Locale.CHINA"
比如这样子:
List list2 = new ArrayList();
list2.add("网易汽车 - W");
list2.add("新民汽车网 - X");
list2.add("钛媒体 - T");
list2.add("瘾科技 - Y");
list2.add("昕薇网 - X");
list2.add("安倍 - A");
list2.add("中国 - Z");
list2.add("中心 - Z");
Comparator cmp2 = com.ibm.icu.text.Collator.getInstance(com.ibm.icu.util.ULocale.SIMPLIFIED_CHINESE);
Collections.sort(list2, cmp2);
for (String str : list2) {
System.out.println(str);
}输出结果:
安倍 - A
钛媒体 - T
网易汽车 - W
昕薇网 - X
新民汽车网 - X
瘾科技 - Y
中国 - Z
中心 - Z这下子 , 生僻汉字的输出也正确了
数组汉字排序
String[] names = {"王林", "杨宝", "李镇", "刘迪", "刘波"};
Arrays.sort(names, com.ibm.icu.text.Collator.getInstance(ULocale.SIMPLIFIED_CHINESE));
System.out.println(Arrays.toString(names));输出 : [李镇, 刘波, 刘迪, 王林, 杨宝]