Android中一种高效省资源的汉字转拼音的实现

我在开发Android项目中经常会遇到汉字转拼音的需求,主要是一些按拼音排序,首字母本地搜索匹配的需求,这些需求的特点是这样的:不要求处理声调和多音字,但是对算法效率,内存占用要求较高。下面我分享一下我方案和实现。


基于unicode码的索引实现

原理:
我们常用的汉字大概有19000多个,在unicode编码里是连续的,范围是u4E00-u9FA5。unicode编撰的人可能对汉子不是很了解,所以编码的顺序没什么规律。汉语拼音的组合,比如这些:chang,dao,cui。这些组合一共有400多个。
我想到的方案是将所有拼音组合作为一张表。每个汉字unicode码对应一个拼音组合表的索引。汉字转拼音的时候直接通过unicode码找到对应索引,然后查到对应的拼音。这样实现的算法复杂度为O(1)。
内存占用稍微大一点,两张表一共占用为42k字节。

实现:
1,拼音组合的表,作为一个常量数据,类似下面这样:

这个常量数组会常驻内存,内存占用大概2k左右。
2,unicode索引文件,索引文件的作用是通过汉字unicode码找到拼音表对应的拼音,所以最简单的实现就是两列的表,第一列是unicode(汉字所在范围都是16位,2字节),第二列是拼音表中的索引(0-407,需要16位表示,2字节)。类似下面这样:

但其实仔细一下,第一列unicode码是连续的,如果全部减去4E00,第一列就变成0,1,2,3,4…这样,其实没用必要存在,转拼音时候只要把汉字unicode减去4E00就能找到对应的索引。所以去掉第一列这个文件就是一个索引的数组。文件大小是40k,也需要常驻内存。
简单的流程示意如下:

具体的实现已经开源到github,地址:
https://github.com/joker535/tinyPinyin

Android中汉字转拼音的优化相关推荐

  1. Java/Android中汉字转拼音的两种方法,优劣比较

    一.前言 在我们的开发中,有时会有这样的需求,就是联系人列表按照拼音顺序排列(如通讯录).于是,我也在网上搜到了许多这类的文章,就两种最常见的做法在此进行简单的比较和分析 二.汉字转拼音的方法 使用第 ...

  2. Android中汉字转拼音的两种方法,优劣比较

    一.前言 在我们的开发中,有时会有这样的需求,就是联系人列表按照拼音顺序排列(如通讯录).于是,我也在网上搜到了许多这类的文章,就两种最常见的做法在此进行简单的比较和分析 二.汉字转拼音的方法 使用第 ...

  3. android中汉字转为拼音

    汉语转为拼音 首先要先导入架包:com.belerweb:pinyin4j:2.5.1 工具类: 注释的方法,是可以将单个汉字转为拼音的,为注释的可以转化词语, public class HanZiT ...

  4. Android中对图片的内存优化方法

    Android 中对于图片的内存优化方法 1. 对图片本身进行操作 尽量不要使用 setImageBitmap.setImageResource.BitmapFactory.decodeResourc ...

  5. java 判断汉字音调_Java中汉字转拼音pinyin4j用法实例分析

    本文实例讲述了Java中汉字转拼音pinyin4j用法.分享给大家供大家参考,具体如下: 汉字转换拼音在日常开发中是个很常见的问题.例如我们伟大的12306,在地名中输入"WH", ...

  6. Android输入汉字得到拼音

    前一段时间,研究Android的通讯录,在它的contacts2.db数据库中发现raw_contacts表中有sort_key这一列用于排序的汉语拼音等信息,就突然想到我们可以利用它得到汉字相应的拼 ...

  7. Android/Java汉字转拼音类及按A-Z排序方法

    在Android / java 开发中有时需要对数据进行根据拼音[A-Z]的规则进行排序所以需要先将汉字转为拼音然后再进行排序 //汉字转拼音类 package xyz.sort; import ja ...

  8. android中文首字母排序,Android上汉字按拼音排序如何实现?

    具体的代码在 packages\providers\contactsprovider\src\com\android\providers\contacts\ContactL ocaleUtils.ja ...

  9. android 汉字转字节,android实现汉字转拼音功能 带多音字识别

    android 汉字转拼音带多音字识别功能,供大家参考,具体内容如下 问题来源 在做地名按首字母排序的时候出现了这样一个bug.长沙会被翻译拼音成zhangsha,重庆会被翻译拼音成zhong qin ...

最新文章

  1. 写个测试程序测试下,单片机使用浮点型数效率有多低
  2. windows popen 获取不到输出_彻底明白os.system、os.popen、subprocess.popen的用法和区别...
  3. 《好未来编程题》求和
  4. 三星+android+7.0+自动纠正单词,升级党必看!三星S/Note系列更新Android 7.0指南
  5. sort和qsort函数
  6. 孜然导航系统 v2.3
  7. 使用System.Timers.Timer类实现程序定时执行
  8. 移动安全-iOS(一)
  9. Perl程序设计中常用的函数
  10. Shiro 权限注解
  11. linux中设置环境变量_如何在Linux中设置环境变量
  12. mysql group by having 子句
  13. 拓端tecdat|R语言回测交易:根据历史信号/交易创建股票收益曲线
  14. 9个数中取最大值最小值速度问题
  15. Python_基础1
  16. word设置图片上边空白24点,下边9点,图片和图注在一行怎么办?
  17. 百度网盘终于不限速了!
  18. 一个ZFS开发者眼中的苹果最新文件存储系统APFS
  19. 手机页面底部浮动的按钮
  20. 线上招生太难?教育行业裂变方案奉上

热门文章

  1. 关于 AMP,Webnovel 都做了些什么?
  2. R语言:日期时间——字符、日期戳、时间戳转日期时间
  3. 论文笔记:疲劳检测与分心检测
  4. 硬核!拼多多三面惨败,附赠课程+题库
  5. TP Non-static method app\index\controller\Class::method () should not be called statically
  6. es浏览器连接电脑找不到服务器,es文件浏览器,教您es文件浏览器怎么连接电脑...
  7. ArcGIS Excel转shp点
  8. 基于MSP430智能小车的设计
  9. 半导体史上规模最大并购案尘埃落定,对中国影响有多大?
  10. Apache Atlas安装部署报错之解决方案