◉◡◉ 您好,欢迎到访伊成个人站!

对中文汉字排序的方法总结

写在前面

在各个系统中,都随处可见根据某个字段进行升序(ASC)或降序(DESC)进行排序展示。但进行中文汉字排序和查找的时候,对中文汉字的排序和查找结果往往都是错误的。

为了尽量提供全面的解决方法,本文会从各个层面出发告知有需要的人对应的解决方法。

场景一 在MYSQL中如何正确对中文进行排序

解决方法:在查询语句的 order by 部分使用 CONVERT 函数。

1
2
-- 对中文排序 升序
select * from tb_resource_type ORDER BY CONVERT(type_name USING gbk)

1
2
-- 对中文排序 降序
select * from tb_resource_type ORDER BY CONVERT(type_name USING gbk) DESC

场景二 在接口开发中如何正确对中文进行排序

使用Collections.sort()重新compare方法进行中文 升序,以下仅为代码片段,仅供参考。

1
2
3
4
5
6
7
Comparator comparator = Collator.getInstance(Locale.CHINA);
Collections.sort(codeList, new Comparator<TbmResourceVo>() {
@Override
public int compare(TbmResourceVo vo1, TbmResourceVo vo2) {
return comparator.compare(vo1.getTypeName(), vo2.getTypeName());
}
});

如何在代码中进行中文倒序排序,可以在升序的基础上,利用 Collections.reverse() 即可完成。

1
2
3
4
5
6
7
8
9
Comparator comparator = Collator.getInstance(Locale.CHINA);
Collections.sort(codeList, new Comparator<TbmResourceVo>() {
@Override
public int compare(TbmResourceVo vo1, TbmResourceVo vo2) {
return comparator.compare(vo1.getTypeName(), vo2.getTypeName());
}
});

Collections.reverse(codeList);

其他方式

也可以将汉字转为拼音在进行排序,添加pinyin4j的依赖。

<dependency>
  <groupId>com.belerweb</groupId>
  <artifactId>pinyin4j</artifactId>
  <version>2.5.0</version>
</dependency>

The end.

支付宝打赏 微信打赏