您的位置:首页 > 编程语言 > Java开发

通讯录之按汉字首字母排序-java

2017-01-05 22:37 204 查看
最近开发手机端OA系统通讯录时遇到了用汉字首字母排序的问题,各种谷歌后发现了一个轮子
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 汉字排序 pinyin4j