开发中碰到个小需求:需要对省按拼音排序。其实全国的省个数并不多,实在不行人肉排序也OK,不过这样就太挫了。

网上查了下,发现原生JDK自带的解决方法如下:

package com.taobao.test;

import java.text.Collator;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Comparator;

import java.util.Iterator;

import java.util.Map;

public class TestSortChinese {

public static void main(String[] args){

Iterator it = SortChinese.provinceMap.entrySet().iterator();//这里的map里数据是全国所有的省中文String

ArrayList al = new ArrayList();

while(it.hasNext()){

al.add((String)((Map.Entry)(it.next())).getValue());

}

Object[] arr = al.toArray();

Comparator cmp = Collator.getInstance(java.util.Locale.CHINA);

Arrays.sort(arr, cmp);

for(Object s : arr){

System.out.println(s);

}

}

}

打印出来的结果还行,除了重庆因为多音字的原因,被当成了zhong庆排在了末尾,其它的都对了。对于这个特殊情况就单独处理下好了。

这个JDK自带的方法这么好用吗?查证了下发现是有缺陷的,其只能对于GB2312里的中文字符进行正确排序,通俗点说就是只能对常用字好用。但是这个常用字的定义也不能让人很满意,只支持6000多个常用字,这是远远不够的。GBK是GB2312的超集,里面包含了20000多个中文字符(基本就包括所有中文字符了),但是不包含在GB2312里的字符都无法正确排序了。

网上普遍的解决方案是用到一个开源项目:http://pinyin4j.sourceforge.net/。具体可见下面这四篇文章,里面叙述的都比较详细了:

http://www.blogjava.net/spinage/archive/2009/10/15/298403.html

http://hi.baidu.com/chssheng2007/item/1bf3a6dedea5eff492a974fb

http://blog.csdn.net/kennylee26/article/details/3926168

http://blog.csdn.net/machozhao/article/details/1047333

由于此次只用到了点皮毛,所以没有深入的去钻研,但正如参考文章里写到的,实现的原理就是把汉字转化为拼音,然后再进行的排序。有兴趣的读者可以深挖下怎么把汉字转化为拼音。我看到有文章介绍说可以用到系统里的字库的,但未进行实践尝试,暂先不过多叙述了。

java 汉字按拼音排序_Java当中汉字按照拼音排序相关推荐

  1. java 中文转首字母_Java 将汉字转换为拼音并取首字母大写

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 首先需要引入pinyin4j-2.5.0.jar 在定义一个servlet.Java的类,写一个Converting方法 实例代码详解如下: public ...

  2. java对中文排序_java对中文(拼音)进行排序

    拼音排序 拼音有好几种方式,其中最主要的是中华人民共和国的汉语拼音 Chinese Phonetic.对汉字的排序有两种:一种是宽松的,能够按拼音排序最常用的汉字,另一种是严格的,能够按拼音排序绝大部 ...

  3. java 怎么自定义排序_Java如何实现List自定义排序

    Java如何实现List自定义排序,自定义,即为,详细内容,相关文章,更多关于 Java如何实现List自定义排序 易采站长站,站长之家为您整理了Java如何实现List自定义排序的相关内容. 实体类 ...

  4. java最全基础知识_Java编程入门,计数排序(Counting Sort)怎么做?

    计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中. 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数. 计数排序(Counting sort)是一种稳定的排 ...

  5. java sort()怎么实现的_Java中Array.sort()的排序原理

    People[]people={newPeople("小飞飞","2","2:41:28"),newPeople("小国" ...

  6. java最全基础知识_Java编程入门,选择排序(Selection Sort)怎么做?

    表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好.唯一的好处可能就是不占用额外的内存空间了吧.理论上讲,选择排序可能也是平时排序一般人想到的 ...

  7. java面试排序都考哪几种排序_java算法面试题:排序都有哪几种方法?

    一.冒泡排序 [java] view plain copy package sort.bubble; import java.util.Random; /** * 依次比较相邻的两个数,将小数放在前面 ...

  8. java给xyz大小排序_java递归实现string xyz排序

    先用上面的一张图说明逻辑,这就是递归的逻辑. xy排序就相当于在x的空位插上y,x只有两个空位,y插前面得带yx,y插后面得到xy xyz排序就相当于在xy排序的所有结果插上z,结果如图 代码实现如下 ...

  9. java 获取拼音码_Java获取汉字拼音的全拼和首拼实现代码分享

    import java.util.Collections; import java.util.Iterator; import java.util.LinkedHashMap; import java ...

  10. java 拼音识别_JAVA实现汉字转拼音

    packageedu.ws;importcom.github.stuxuhai.jpinyin.ChineseHelper;importcom.github.stuxuhai.jpinyin.Piny ...

最新文章

  1. php redis hsetnx,Redis Hsetnx 命令
  2. linux用数字方式显示文件权限,全面解析Linux数字文件权限
  3. 【OpenCV的C++教程3】掩膜操作的细节
  4. 树莓派4bwlan驱动_【DIY纯手工】用树莓派DIY的桌面电脑
  5. 4由通道检测_十堰城区108处桥隧通道接受全面“体检”将持续至8月底
  6. 计算机用户域怎么删除,如何查找并删除AD域中多余的计算机帐号?
  7. (JavaScript)实现在客户端动态改变Treeview节点的选中状态
  8. Jenkins使用FTP进行一键部署及回滚(Windows)
  9. 字符集及其存储方式(解决乱码问题)
  10. JS开发工具WebStorm使用快捷键
  11. 微信小程序购物车功能实现(干货满满)
  12. 计算机游戏设计专业世界大学排名,看过来,世界五大顶尖游戏设计大学在这里...
  13. 北京市密云区谷歌卫星地图下载
  14. PyGame实现小游戏案例[小甲鱼 PlayTheBall]
  15. 微信能上但浏览器无法上网
  16. Intent跳转地图应用(百度地图、高德地图)
  17. Linux摄像头驱动框架
  18. matlab程序求解工程,面向计算科学与工程的Matlab编程源码
  19. 手机远程启动汽车,汽车远程启动还是手机控制好!有一种远程手机启动热车系统非常的不错是什么功能知道吗?
  20. wlop一张多少钱_为什么很多人都对wlop有成见?

热门文章

  1. 省会、自治区、直辖市、特别行政区
  2. 武忠祥<高等数学辅导讲义> 第一章
  3. Sql server 密钥
  4. 第一行代码(Android)第二版PDF和源码
  5. IEEE极限编程练习:Sorting Partition
  6. 全国 下拉框 选项值:35个省级行政区
  7. router走差分_route
  8. Python Django 个人博客源码(附个人源码和网站参考)
  9. 高等数学常用极限求法总结(无详解)
  10. 中国象棋博弈源代码Android,中国象棋源代码