Android中汉字转换成拼音报错的处理解决.....
来源:互联网 发布:serv u linux 破解 编辑:程序博客网 时间:2024/06/06 08:46
汉字转拼音android实现(HanziToPinyin类)分类: Android 自动化 2011-08-30 19:55 10149人阅读 评论(19) 收藏 举报androidcharactertokenstringcollationinput 对Contacts了解就会知道(不了解可以了解下),每个联系人都有一个sort_key字段,如果查询中没有设置sortOrder,默认就会以 sort_key字段为排序依据。名字的检索其实也是根据sort_key来做的(比如拨号盘的模糊匹配:数字转成字母,再到拼音,最后得到汉字)。sort_key是根据名字生成的:如果联系人名字中包含字母,sort_key和name保持一致;如果名字是汉字,生成的sort_key,拼音-汉字-拼音-汉字。。。其中拼音全大写,中间以空格分割,如:”张三“-----sort_key:"ZHANG 张 SAN 三"。 当名字发生变化Sort_key是在packages/providers/ContactsProvider/src/com/android /providers/contacts/ContactsProvider2.java中生成的。具体调用如下:[java] view plaincopyprint?if (displayNameStyle == FullNameStyle.CHINESE || displayNameStyle == FullNameStyle.CJK) { sortKeyPrimary = sortKeyAlternative = ContactLocaleUtils.getIntance().getSortKey( displayNamePrimary, displayNameStyle); } 调用了packages\providers\contactsprovider\src\com\android\providers \contacts\ContactLocaleUtils.java中的ChineseContactUtils.getSortKey()方法,具体实现如下:[java] view plaincopyprint?ContactLocaleUtils.getIntance(); 取得实例,然后调用:[java] view plaincopyprint?1. public String getSortKey(String displayName, int nameStyle) { return getForSort(Integer.valueOf(nameStyle)).getSortKey(displayName); } 2. @Override public String getSortKey(String displayName) { ArrayList tokens = HanziToPinyin.getInstance().get(displayName); if (tokens != null && tokens.size() > 0) { StringBuilder sb = new StringBuilder(); for (Token token : tokens) { // Put Chinese character's pinyin, then proceed with the // character itself. if (Token.PINYIN == token.type) { if (sb.length() > 0) { sb.append(' '); } sb.append(token.target); sb.append(' '); sb.append(token.source); } else { if (sb.length() > 0) { sb.append(' '); } sb.append(token.source); } } return sb.toString(); } return super.getSortKey(displayName); } 以上调用了frameworks/base/core/java/com /android/internal/util/HanziToPinyin.java(下文附源码)中的方法得到了拼音,当然转换实现需要本地的支持,但是此处只要取得这个文件即可完成在android上从汉字到拼音的转换。从路径可以看出HanziToPinyin.java是一个内部类,不能直接调用,不过可以把这个文件取出来放在自己的项目中直接使用。调用也很简单方便,上边基本给出了,看下HanziToPinyin的源码就比较清楚了。以下是我写的一个调用:输入汉字返回拼音,字母原样返回,都转换为小写(默认取得的拼音全大写)。[java] view plaincopyprint?package com.spare.pinyin; import java.util.ArrayList; import com.spare.pinyin.HanziToPinyin.Token; public class PinYin { //汉字返回拼音,字母原样返回,都转换为小写(默认取得的拼音全大写) public static String getPinYin(String input) { ArrayList tokens = HanziToPinyin.getInstance().get(input); StringBuilder sb = new StringBuilder(); if (tokens != null && tokens.size() > 0) { for (Token token : tokens) { if (Token.PINYIN == token.type) { sb.append(token.target); } else { sb.append(token.source); } } } return sb.toString().toLowerCase(); } } 以下附上frameworks/base /core/java/com/android/internal/util/HanziToPinyin.java源码更新:4.X上代码位置已变更packages/providers/ContactsProvider/src/com/android/providers/contacts/HanziToPinyin.java,内容也有所改变,已基于android4.2源码提取并上传。在2.X和4.X上均测试通过
0 0
- Android中汉字转换成拼音报错的处理解决.....
- Android汉字转换成拼音
- Android中汉字转拼音的内存优化处理
- Android中汉字转换为拼音
- Android中将汉字转换成拼音
- java中汉字转换成拼音首字母
- java中汉字转换成拼音
- java中汉字自动转换成拼音
- Java中汉字转换成拼音码!
- 汉字转换成拼音
- 汉字转换成拼音
- 汉字转换成拼音
- 汉字转换成拼音
- 汉字转换成拼音
- 汉字转换成拼音
- 汉字转换成拼音
- 汉字转换成拼音
- 汉字转换成拼音
- ACM--steps--3.1.2--骨牌铺方格
- 部署文件传输服务
- ASIHTTPRequest的封装
- Thinking in BigData(八)大数据Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解
- ASP.NET MVC中使用Unity Ioc Container
- Android中汉字转换成拼音报错的处理解决.....
- 介绍一个很不错的电影网站
- android.view.InflateException: Binary XML file line #95: Error inflating class(out of memory)
- 01背包变形--求方案数
- Linux网络协议栈之套接字缓冲区(1)
- linux 下swftools0.9.2的安装
- 文本文件与二进制文件
- Android应用防内存泄露小结
- 将Eclipse代码导入到AndroidStudio的两种方式...