Java数组中文排序_Java模块 -- 数组/集合中文汉字排序(支持生僻汉字)

这里举例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));输出 : [李镇, 刘波, 刘迪, 王林, 杨宝]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值