通讯录之按汉字首字母排序-java
2017-01-05 22:37
204 查看
最近开发手机端OA系统通讯录时遇到了用汉字首字母排序的问题,各种谷歌后发现了一个轮子
原博客地址
支持同一汉字有多个发音
还支持拼音的格式化输出,比如第几声之类的,
同时支持简体中文、繁体中文转换为拼音…使用起来也非常简单。下面是其官方网址,其中提供了下载:
*pinyin4j的官方下载地址[]http://sourceforge.net/projects/pinyin4j/files/]
本文只是使用了pinyin4J的主要功能,还有更多更好耍的功能,大家可以去研究官网文档。哈哈
下载解压后的目录结构及说明如下
(1)
(2)
(3)
(4)
(5)
(6)
二.转换代码
三.实现 Comparable 接口并且使用内部类compare重载compareTo方法实现排序代码。
pinyin4J,这个轮子是可以将汉字转换成字母拼音,个人觉得很好用,完美的解决了排序的问题,分享一下。
原博客地址
一.工具介绍
pinyin4j是一个支持将简体和繁体中文转换到成拼音的Java开源类库,作者是Li Min (xmlerlimin@gmail.com)。支持同一汉字有多个发音
还支持拼音的格式化输出,比如第几声之类的,
同时支持简体中文、繁体中文转换为拼音…使用起来也非常简单。下面是其官方网址,其中提供了下载:
*pinyin4j的官方下载地址[]http://sourceforge.net/projects/pinyin4j/files/]
本文只是使用了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<Map<String, Object>>() { public int compare(Map<String, Object> o1, Map<String, Object> o2) { return getFirstSpellOne((String) o1.get("str")) .compareTo( getFirstSpellOne((String) o2 .get("str"))); } });
四.测试效果
五.那么问题来了
这个列子只能按字符串第一个字符的首字母来排序,比如字符串张三和
赵五第一个字符首字母是一样的,那能不能再通过第二个字符
三和
五来进行排序呐。如果字符串的第二个字符首字母也是一样的呐,依次类推。希望哪位大神好的思路交流交流,带我装逼带我飞。。。
六.JUST DO IT
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。相关文章推荐
- 通讯录之按汉字首字母排序-java
- java实现中文汉字按首字母排序
- java实现中文汉字的首字母排序
- 《android2.2自带通讯录》之联系人按拼音排序以及按汉字首字母或全拼搜索
- java汉字中首字母排序
- Java实现中文汉字的首字母排序
- Java 集合排序、汉字按字母表排序问题
- java-实现汉字按字母顺序排序
- java按汉字首字母排序
- java对于汉字的首字母排序,遇到生僻字时,不要使用Collator.getInstance(java.util.Locale.CHINESE),而要用com.ibm.icu.util.ULocale
- java将汉字转成拼音并按照首字母排序的有效方法。
- java实现中文汉字的首字母排序
- java-实现汉字按字母顺序排序
- iOS中获取本地通讯录联系人以及汉字首字母排序
- 仿手机通讯录,汽车之家选车频道实现汉字名称首字母排序,字母分组集合
- IOS中获取本地通讯录联系人以及汉字首字母排序
- java汉字中首字母排序
- java实现中文汉字的首字母排序
- 《android2.2自带通讯录》之联系人按拼音排序以及按汉字首字母或全拼搜索
- java 英语字母 排序 汉字全拼 排序 (冒泡排序 & 无递归快排)