转载请表明出处:http://blog.csdn.net/lmj623565791/article/details/23187701

开发过程中有时候会遇到使用拼音模糊搜索等功能(典型的就是Android通讯录了),这时就需要汉字能够转化为拼音。


1、Android系统的通讯录也实现了拼音搜索,所以我们可以偷个懒,直接拿Android系统中的实现类来实现这个功能。

sdk\sources\android-2.3.3-gingerbread-src\com\android\internal\util\HanziToPinyin.java

该类我们无法直接获取实例或者反射访问,不过我们可以直接把源码拷入自己的项目中,然后使用。

概览:

Android Java汉字转拼音总结简单看一下,就提供了一个get(Sting)方法供使用。

使用方式:

public void testHanziToPinyin(){ArrayList<Token> list = HanziToPinyin.getInstance().get("单赵 钱 孙 李 周 吴 郑 王冯 陈 褚 卫 蒋 沈 韩 杨 朱");for (Token token : list){System.out.print(token.source + " , " + token.target + " , " + token.type);System.out.println();}}
输出结果:

Android Java汉字转拼音总结

简单解释一下:HanziToPinyin是一个单例,获得该类实例后,get方法传入一个字符串,然后会对每个字符串的每个字符进行解析,解析结果存入Token中,

token.source=源 ;token.target=结果,token.type=2(也就是 public static final int PINYIN = 2; 封装的常量)


2、使用Pinyin4j

首先去http://pinyin4j.sourceforge.net/ 下载一个jar包。

主要的几个类:

PinyinHelper 调用方法的核心类

HanyuPinyinOutputFormat 输出格式,设置HanyuPinyinCaseType(大小写),HanyuPinyinToneType(声调的方式),HanyuPinyinVCharType(V的输出方式)

使用方式:

String str = "单赵钱孙李周吴郑王冯陈褚卫abc";HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();format.setCaseType(HanyuPinyinCaseType.UPPERCASE);format.setToneType(HanyuPinyinToneType.WITH_TONE_NUMBER);for(int i = 0 ; i < str.length() ; i++){char c = str.charAt(i);String[] vals = PinyinHelper.toHanyuPinyinStringArray(c, format);System.out.print(Arrays.toString(vals));}

输出结果:对于非汉字输出的是返回null

[DAN1, CHAN2, SHAN4][ZHAO4][QIAN2][SUN1][LI3][ZHOU1][WU2][ZHENG4][WANG2, WANG4][FENG2, PING2][CHEN2][CHU3, ZHU3][WEI4]nullnullnull

附上一张官网的图,关于各种格式组合的结果:

Some combinations of these three output formats are forbidden. For example, '吕'

LOWERCASE Combination WITH_U_AND_COLON WITH_V WITH_U_UNICODE WITH_TONE_NUMBER WITHOUT_TONE WITH_TONE_MARK
lu:3 lv3 lü3
lu: lv
Exception Exception

UPPERCASE Combination WITH_U_AND_COLON WITH_V WITH_U_UNICODE WITH_TONE_NUMBER WITHOUT_TONE WITH_TONE_MARK
LU:3 LV3 LÜ3
LU: LV
Exception Exception


我附上:HanziToPinyin.java以及Pinyin4J.jar供找不到源码或者无法正常下载的亲们下载,下载地址:http://download.csdn.net/detail/lmj623565791/7161713。











更多相关文章

  1. android八种通信方式
  2. android studio 更改快捷键为eclipse中习惯的方式
  3. android studio 设置编译apk的名称以及配置签名,打包方式
  4. Android中BindService方式使用的理解
  5. 简单实现Android AudioReccord录音方式
  6. android操作XML的几种方式
  7. 【Android UI设计与开发】第14期:顶部标题栏(五)两种方式实现仿微信
  8. Qt_Qtopia与Android的进程间通讯方式
  9. Android 用手动组拼的方式生成xml

随机推荐

  1. 微软和Wistron再度联手,Android和Chrome O
  2. (一)Android应用程序及组件简介
  3. ubuntu linux通过adb命令行"复制粘贴"内
  4. 【Android实战开发】3G技术和Android发展
  5. Android中Handler异步线程
  6. AndroidManifest.xml 详解 (四) 之uses-p
  7. Android设备到底侵犯了微软的什么专利
  8. (三)Android(安卓)Context说明
  9. Android(安卓)的广播机制和两种注册方式
  10. 深入Android(安卓)【一】 —— 序及开篇