最近开发一个城市选择的功能,找了这个文章
Android 城市列表选择
结果发现它使用的拼音转换库pinyin4j有一个很严重的问题,竟然长沙chang sha识别为zhang sha,结果长沙北分在Z那一栏…
这是个多音字问题,长可以读chang,也可以读zhang。
那咋办?
找到一个网友自己做的自定义词库的
适用于Java和Android的快速、低内存占用的汉字转拼音库。
github:https://github.com/promeG/TinyPinyin
这位网友还做了个中国地区适配的库:
这下长沙顺利回到了了chang sha。
但是又有一个问题,长治chang zhi还是zhang zhi
有2个解决办法,1是自定义词典
compile 'com.github.promeg:tinypinyin:2.0.3' // TinyPinyin核心包,约80KB
compile 'com.github.promeg:tinypinyin-lexicons-android-cncity:2.0.3' // 可选,适用于Android的中国地区词典
// 添加中文城市词典
Pinyin.init(Pinyin.newConfig().with(CnCityDict.getInstance(this)));
// 添加自定义词典
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[]{"CHANG", "ZHI"});
map.put("长沙", new String[]{"CHANG", "SHA"});
map.put("长春", new String[]{"CHANG", "CHUN"});
map.put("重庆", new String[]{"CHONG", "QING"});
return map;
}
}));
Pinyin.toPinyin("长沙", "")
2是改这位网友的词库,然后通过导入lib的方式使用
至于用哪种方法自己看怎么来方便了…