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

本文介绍了如何使用java开源库pinyin4j将汉字转换为拼音首字母,以便进行通讯录的排序。通过示例代码展示了获取汉字首字母的方法,并实现了Comparable接口进行排序。文章还提出了按多个字符首字母排序的思考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近开发手机端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")));

}

});复制代码

四.测试效果

cb610ae00b5fcaf4ea0f7cfdb0a093ed.png 测试效果

五.那么问题来了

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

六.JUST DO IT

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

最后更新时间:2017年1月5日 22:56

如要转载请注明出处:z77z.oschina.io/2017/01/05/…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值