Android汉字转拼音核心代码解读
来源:互联网 发布:软装饰品知乎 编辑:程序博客网 时间:2024/04/28 02:28
原理:
找两个数组,一个用来存储所有相同汉字拼音的第一个汉字的Unicode编码,另一个用来存储对应的拼音。
注:可不是说按照Unicode编码大小来排序的。而是按照我们汉字的A,B,C,D,E,F,G这样的拼音发音的顺序,最后几个是仓颉字
大家可以看下,由于太长就简单复制一段吧。好心里有数。
public static final char[] UNIHANS = {
'\u963f', '\u54ce', '\u5b89', '\u80ae', '\u51f9', '\u516b',
'\u963f', '\u54ce', '\u5b89', '\u80ae', '\u51f9', '\u516b',
public static final byte[][] PINYINS = {
{ 65, 0, 0, 0, 0, 0}, { 65, 73, 0, 0, 0, 0},
{ 65, 0, 0, 0, 0, 0}, { 65, 73, 0, 0, 0, 0},
核心代码:
if (offset < 0) { int begin = 0; int end = UNIHANS.length - 1; while (begin <= end) { offset = (begin + end) / 2; final String unihan = Character.toString(UNIHANS[offset]); cmp = COLLATOR.compare(letter, unihan); if (cmp == 0) { break; } else if (cmp > 0) { begin = offset + 1; } else { end = offset - 1; } } }
UNIHANS是汉字数组,第一个是\u963F,最后一个是\u9FFF,然后从中间开始对比,
Collator COLLATOR = Collator.getInstance(Locale.CHINA)
这个是汉字比大小类,然后开始对比下我们汉字大概的位置。相等的时候匹配成功,打了就偏移++,小了就偏移--
最后再找下拼音数组,然后返回拼音。
这里让我不明白的地方就是为什么不按照Unicode的顺序,从大到小,建立一个Unicode数组,里面存储的还是第一个发生拼音变化的Unicode,再用一个char数组存储对应的拼音,这样匹配的时候我们可以直接转码Unicode比大小,也不用谷歌的这个Collator排序,据说谷歌的这个Collator有问题。
0 0
- Android汉字转拼音核心代码解读
- android 汉字转拼音
- android 汉字转拼音
- android 汉字转拼音
- Android 汉字转拼音
- Android汉字转拼音
- Android 汉字转拼音
- android汉字转拼音
- android汉字转拼音
- asp汉字转拼音代码
- 汉字转拼音的代码
- ios汉字转拼音代码
- coffeescript 汉字转拼音代码
- android中的汉字转拼音
- Android之汉字转拼音
- Android汉字转拼音HanziToPinyin
- Android Studio 汉字转拼音
- Android汉字转拼音HanziToPinyin
- 大风歌三国杀分公司的风格撒旦法个
- Cocos2d-x 3.2编写常用UI组件(二)滚动计数器NumberScroller
- Spring--quartz中cronExpression 值
- 欢迎使用CSDN-markdown编辑器
- linux下将eth1改为eth0
- Android汉字转拼音核心代码解读
- hibernate学习:联合主键2
- ORACLE数据库相关文件
- APK安装过程及原理
- Cocos2d-x 3.2编写常用UI组件(一)新手指导框GuideLayer
- USACO6.4.1 The Primes(prime3)
- 扩散模型解析
- 强制重启N种方法
- Test