第一:首先引入pinyin4j-2.5.0.jar
第二:写工具类
- package test;
- import net.sourceforge.pinyin4j.PinyinHelper;
- import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
- import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
- import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
- public class PinYinUtils {
- //将汉字转换成拼音--转换单个字符
- public static String[] getCharacterPinYin(char c){
- HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
- format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
- String pinyin[] = null ;
- try{
- pinyin = PinyinHelper.toHanyuPinyinStringArray(c, format);
- //注意返回的字符串数组,因为可能是多音字
- }catch(BadHanyuPinyinOutputFormatCombination e){
- e.printStackTrace();
- }
- // 如果c不是汉字,toHanyuPinyinStringArray会返回null
- if(pinyin == null)
- {
- return null;
- }
- else{
- return pinyin;
- }
- }
- }
第三步:写测试类(用junit测试框架)
需要注意的是该测试类要求引入junit.jar文件
- package test;
- import static org.junit.Assert.*;
- import org.junit.Test;
- public class TestPinYin {
- @Test
- public void testGetPinYin() {
- String [] temp = PinYinUtils.getCharacterPinYin('解');
- for(int i=0; i<temp.length; i++){
- System.out.println(temp[i]);
- }
- }
- }
打印结果:
jie
jie
xie
第四步:测试多个汉字转换成拼音
- public static void main(String[] args) {
- String name = "陈超阳";
- StringBuffer result = new StringBuffer();
- for(int i=0; i<name.length(); i++){
- result.append(PinYinUtils.getCharacterPinYin(name.charAt(i))[0]);
- }
- System.out.println(result.toString());
- }
注意:上述代码:如果一个汉字是多音字,默认取它的第一个拼音。
打印结果:chenchaoyang
汉字转拼音:
String[] pinyin = PinyinHelper.toHanyuPinyinStringArray('重');
上面这行代码就是单个汉字转拼音了,例如“重”字,该方法返回一个String类型的数组:
"zhong4"
"chong2"
“重”是一个多音字,该方法的返回数组包含这个字的所有读音的拼音。每个读音最后有个数字就是音调(第一声 第二声 第三声 第四声,这个不用解释了)。
上面是最简单的一种获取单个汉字的方式,还可以使用HanyuPinyinOutputFormat来格式化返回拼音的格式。
[java]
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
// UPPERCASE:大写 (ZHONG)
// LOWERCASE:小写 (zhong)
format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
// WITHOUT_TONE:无音标 (zhong)
// WITH_TONE_NUMBER:1-4数字表示英标 (zhong4)
// WITH_TONE_MARK:直接用音标符(必须WITH_U_UNICODE否则异常) (zhòng)
format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);
// WITH_V:用v表示ü (nv)
// WITH_U_AND_COLON:用"u:"表示ü (nu:)
// WITH_U_UNICODE:直接用ü (nü)
format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
String[] pinyin = PinyinHelper.toHanyuPinyinStringArray('重', format);
toHanyuPinyinStringArray如果传入的字符不是汉字不能转换成拼音,那么会直接返回null。