工具:pinyin4j
pinyin4j是一个支持将简体和繁体中文转换到成拼音的Java开源类库
pinyin4j的官方下载地址:http://sourceforge.net/projects/pinyin4j/files/,目前最新的版本是2.5.0
下载解压后的目录结构及说明如下
- doc : pinyin4j的api文档
- lib : pinyin4j的jar包
- src : pinyin4j的源代码
- CHANGELOG.txt : pinyin4j的版本更新日志
- COPYING.txt : LICENSE说明
- README.txt : pinyin4j的概要介绍
HanyuPinyinCaseType:定义汉语拼音的大小写类型;两个类属性UPPERCASE和LOWERCASE;
HanyuPinyinToneType:定义汉语拼音声调类型
WITH_TONE_NUMBER(以数字代替声调) : zhong1 zhong4
WITHOUT_TONE (无声调) : zhong zhong
WITH_TONE_MARK (有声调) : zhōng zhòng
HanyuPinyinVCharType:定义汉语拼音字符u的类型(碰到unicode 的ü 、v 和 u时的显示方式) 如汉字“吕”
WITH_U_AND_COLON : lu:3
WITH_V : lv3
WITH_U_UNICODE : lü3
HanYuPinYinOutputFormat:定义汉语拼音的输出类型,值都是取得上述三个类的类属性 eg:
HanYuPinYinOutputFormat format = new HanYuPinYinOutputFromat();
format.setCaseType(……);
format.setToneType(……);
format.setVCharType(……);
应用:
通常情况下,只需要用到其中的PinyinHelper类中的静态方法toHanyuPinyinStringArray就可以了,比如:
String[] pinyinArray =PinyinHelper.toHanyuPinyinStringArray('单');
for(int i = 0; i < pinyinArray.length; ++i){
System.out.print(pinyinArray[i]);
}
就会输出:
dan1 chan2 shan4
下面请看一个完整的例子:
首先在项目中需要将pinyin4jjar包导入到项目中,这样里面的工具类才能被正常的应用。
/**
* 获取汉字串拼音首字母,英文字符不变
*
* @param chinese
* 汉字串
* @return 汉语拼音首字母
*/
public static String cn2FirstSpell(String str) {
String convert = "";
for (int j = 0; j < str.length(); j++) {
char word = str.charAt(j);
String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);//这个得到的是一个汉字的多个读音的数组且带数字声调的,如张zhang1
if (pinyinArray != null) {
convert += pinyinArray[0].charAt(0);
} else {
convert += word;
}
}
return convert;
}
PinyinHelper默认转化的结果是拼音的全拼且是带数字声调的格式
再来看下面的例子,输出汉字对应拼音的全拼
/**
* 获取汉字串拼音,英文字符不变
*
* @param chinese
* 汉字串
* @return 汉语拼音
*/
public static String cn2Spell(String src) {
char[] t1 = null;
t1 = src.toCharArray();
String[] t2 = new String[t1.length];
HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();
t3.setCaseType(HanyuPinyinCaseType.LOWERCASE);
t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
t3.setVCharType(HanyuPinyinVCharType.WITH_V);
String t4 = "";
int t0 = t1.length;
try {
for (int i = 0; i < t0; i++) {
// 判断是否为汉字字符
if (java.lang.Character.toString(t1[i]).matches(
"[\\u4E00-\\u9FA5]+")) {
t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3);
t4 += t2[0];
} else
t4 += java.lang.Character.toString(t1[i]);
}
return t4;
} catch (Exception e1) {
e1.printStackTrace();
t4="";
}
return t4;
}