我们日常开发中遇到汉字转拼音的机会比较少,但是在做联系人相关的时候就会常常遇到,比如微信联系列表,手机联系人列表,张三的首字母排序是Z,王五的首字母排序是W。
今天给大家介绍一个汉字转拼音的库TinyPinyin,具体的github地址在这里TinyPinyin
项目导入就一步:
compile ‘com.github.promeg:tinypinyin:2.0.3’ // 2018.2.25日最新版本
我们看下这个库的特性
生成的拼音不包含声调,均为大写;
支持自定义词典,支持简体中文、繁体中文;
执行效率很高(Pinyin4J的4~16倍);
很低的内存占用(不添加词典时小于30KB)。
下面让我们看具体的API使用:
1 根据一个字符转成拼音,如果该字符不是汉字就显示该字符,否则转成拼音(下面几个API一样)
String s= Pinyin.toPinyin('梁');
输出结果是: LIANG
2 根据一个字符串转成拼音
String pinyin = Pinyin.toPinyin("梁超杰","/");
//"/"表示分割符,每个拼音之间的分割的符号
输出结果是: LIANG/CHAO/JIE
3 判断一个字符是不是汉字?
boolean isChinese = Pinyin.isChinese('梁');
输出结果是: true
4 处理多音字
举个例子:你的联系人有一个人姓解,这是一个多音字(XIE和JIE)但是这个库默认转换的拼音可能和你的叫法不一致,所以下面这个就派上用场了
// 添加自定义词典
Pinyin.init(Pinyin.newConfig()
.with(new PinyinMapDict() {
@Override
public Map<String, String[]> mapping() {
HashMap<String, String[]> map = new HashMap<String, String[]>();
map.put("解", new String[]{"XIE"});
return map;
}
}));
String pinyin = Pinyin.toPinyin("解元","/");
输出结果: XIE/YUAN
不使用匿名内部类的话,你也可以构造一个类去继承PinyinMapDict,来自定义你对于某些特殊字的拼音要求
欢迎评论区留言一起学习使用这个库,么么哒~