最近开发手机端OA系统通讯录时遇到了用汉字首字母排序的问题,各种谷歌后发现了一个轮子pinyin4J,这个轮子是可以将汉字转换成字母拼音,个人觉得很好用,完美的解决了排序的问题,分享一下。

一.工具介绍

pinyin4j是一个支持将简体和繁体中文转换到成拼音的Java开源类库,作者是Li Min (xmlerlimin@gmail.com)。

支持同一汉字有多个发音

还支持拼音的格式化输出,比如第几声之类的,

同时支持简体中文、繁体中文转换为拼音…使用起来也非常简单。下面是其官方网址,其中提供了下载:

本文只是使用了pinyin4J的主要功能,还有更多更好耍的功能,大家可以去研究官网文档。哈哈

下载解压后的目录结构及说明如下 (1) doc : pinyin4j的api文档 (2) lib : pinyin4j的jar包 (3) src: pinyin4j的源代码 (4) CHANGELOG.txt : pinyin4j的版本更新日志

(5) COPYING.txt : LICENSE说明 (6) README.txt : pinyin4j的概要介绍

二.转换代码

// 获取汉字的首字母大写

public String getFirstSpell(String string) {

StringBuffer pybf = new StringBuffer();

char[] arr = string.toCharArray();

HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();

defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);

defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

for (int i = 0; i < arr.length; i++) {

if (arr[i] > 128) { //如果已经是字母就不用转换了

try {

//获取当前汉字的全拼

String[] temp = PinyinHelper.toHanyuPinyinStringArray(

arr[i], defaultFormat);

if (temp != null) {

pybf.append(temp[0].charAt(0));// 取首字母

}

} catch (BadHanyuPinyinOutputFormatCombination e) {

e.printStackTrace();

}

} else {

if (arr[i] >= 'a' && arr[i] <= 'z') {

arr[i] -= 32;

}

/*if (arr[0] >= 'A' && arr[0] <= 'Z') {// 将大写转换为小写

arr[0] += 32;

}*/

pybf.append(arr[i]);

}

}

return pybf.toString();

}

三.实现 Comparable 接口并且使用内部类compare重载compareTo方法实现排序代码。

Collections.sort(list, new Comparator>() {

public int compare(Map o1, Map o2) {

return getFirstSpellOne((String) o1.get("str"))

.compareTo(

getFirstSpellOne((String) o2

.get("str")));

}

});

四.测试效果

五.那么问题来了

这个列子只能按字符串第一个字符的首字母来排序,比如字符串张三和赵五第一个字符首字母是一样的,那能不能再通过第二个字符三和五来进行排序呐。如果字符串的第二个字符首字母也是一样的呐,依次类推。希望哪位大神好的思路交流交流,带我装逼带我飞。。。

六.JUST DO IT

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

java 中文联系人排序_通讯录之按汉字首字母排序-java相关推荐

  1. java pinyin4j 首字母_通讯录之按汉字首字母排序 --java--pinyin4J

    最近开发手机端OA系统通讯录时遇到了用汉字首字母排序的问题,各种谷歌后发现了一个轮子pinyin4J,这个轮子是可以将汉字转换成字母拼音,个人觉得很好用,完美的解决了排序的问题,分享一下. 一.工具介 ...

  2. js 根据汉字首字母排序(省份排序) 或 根据英文首字母排序——za排序 az排序

    js 根据汉字首字母排序(省份排序) 或 根据英文首字母排序--z~a排序 & a~z排序 示例1 let arr = ["贵州省", "江苏省", & ...

  3. 按汉字首字母排序(sql语句)

    在sql server中可以直接通过SQL语句实现按汉字首字母排序,比如我们经常用到的"按姓名首字母排序" --把tableName和colName换成自己的就ok了 --按拼音 ...

  4. 按汉字首字母排序(sql语句) 只为收集,本人复制粘贴水寒冰局的

    在sql server中可以直接通过SQL语句实现按汉字首字母排序,比如我们经常用到的"按姓名首字母排序" --把tableName和colName换成自己的就ok了 --按拼音 ...

  5. JAVA 根据汉字首字母排序

    实际业务场景可能存在需要根据对象中文名称来进行排序的情况,下面分享下实现方案: 话不多说,上代码 List<RepairVo> list = new ArrayList<>() ...

  6. MySql中用sql语句实现按汉字首字母排序

    转载自https://blog.csdn.net/hulinyi123456/article/details/79915521 1.mysql 1)按照汉字的拼音排序 如果存储汉字的字段编码使用的是G ...

  7. 根据汉字首字母排序并进行分组

    需  求: 页面有一个下拉选项框(选择汽车品牌),由于品牌比较多,所以需要通过首字母就能快捷选择,也就是说:点击字母 "B"后,把汽车品牌首拼音字母为 "B" ...

  8. 从数据库取String的值存放到Map中 按汉字首字母排序并输出

    前后端分离写法: pom.xml文件需要导pinyin4j包: <!-- https://mvnrepository.com/artifact/com.belerweb/pinyin4j --& ...

  9. java中英文汉语混合排序_Java编程实现中英混合字符串数组按首字母排序的方法...

    本文实例讲述了Java编程实现中英混合字符串数组按首字母排序的方法.分享给大家供大家参考,具体如下: 在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷 ...

最新文章

  1. JSP自定义标签渲染时报Illegal to flush错误
  2. formal method第10课
  3. redis缓存穿透、缓存击穿、缓存雪崩概念及解决方案
  4. SpringAop @AfterThrowing通知中获取异常信息并且在控制台打印
  5. 利用C#实现标准的 Dispose模式
  6. 02如何抓住重点,系统高效地学习数据结构与算法?
  7. java中的map是什么_转载java中Map的详解
  8. C++11新特性之decltype关键字的使用
  9. 机器视觉的典型应用及领域分析
  10. Impala中行转列在合并列
  11. 常见iPhone设备尺寸及分辨率(持续更新)
  12. 我终于知道,中国互联网是怎么弯道超车,干翻美国了
  13. 操作系统实验 文件复制/复制文件
  14. 中文编程专栏目录, 初衷和希冀
  15. excel设置行高等于列宽_如何在Excel中设置行高和列宽
  16. 4、spss做多元线性回归
  17. 人口会一直增长下去吗_现在世界人口约多少亿 世界人口会一直增加吗还是越来越少...
  18. Mac 终端配置 oh-my-zsh 和自动补全
  19. LeetCode 118 Pascal's Triangle(帕斯卡三角形)(vector)
  20. Scratch软件编程等级考试四级——20210626

热门文章

  1. 整理网站开发规范(zhuan)
  2. sql在线练习网站(http://sqlzoo.cn)答案解析
  3. 如何将footer标签固定在底部_如何将页脚固定在页面底部(多种方法实现)
  4. PCB电子设计基础知识笔记
  5. java循环编程题_Java 循环 编程练习题(下)
  6. 如何通过搜狐自媒体做关键词优化及引流不封号
  7. nginx部署微信项目:解决微信浏览器缓存问题
  8. n皇后的拉斯维加斯回溯算法
  9. Android Studio 汉化
  10. MyBatis Plus基础理论以及实战