这里是一篇转载的文章:
转载请表明出处: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
该类我们无法直接获取实例或者反射访问,不过我们可以直接把源码拷入自己的项目中,然后使用。
概览:
简单看一下,就提供了一个get(Sting)方法供使用。
使用方式:
[java]view plaincopy
publicvoidtestHanziToPinyin()
{
ArrayList list = HanziToPinyin.getInstance().get(
"单赵 钱 孙 李 周 吴 郑 王冯 陈 褚 卫 蒋 沈 韩 杨 朱");
for(Token token : list)
{
System.out.print(token.source +" , "+ token.target +" , "+ token.type);
System.out.println();
}
}
输出结果:
简单解释一下: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的输出方式)
使用方式:
[java]view plaincopy
String str ="单赵钱孙李周吴郑王冯陈褚卫abc";
HanyuPinyinOutputFormat format =newHanyuPinyinOutputFormat();
format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
format.setToneType(HanyuPinyinToneType.WITH_TONE_NUMBER);
for(inti =0; i < str.length() ; i++)
{
charc = str.charAt(i);
String[] vals = PinyinHelper.toHanyuPinyinStringArray(c, format);
System.out.print(Arrays.toString(vals));
}
输出结果:对于非汉字输出的是返回null
另外附加pinyin4j架包:
http://7xv706.com1.z0.glb.clouddn.com/%E8%BD%AC%E8%87%AA%E8%BD%AC%E6%8B%BC%E9%9F%B3.zip