package com.haiyisoft.innovationcenter.pinyin; import org.junit.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 Pinyin4jTest { //pinyin4j格式类 private HanyuPinyinOutputFormat format = null; //拼音字符串数组 private String[] pinyin; //通过构造方法进行初始化 public Pinyin4jTest() { format = new HanyuPinyinOutputFormat(); //设置转换拼音格式 /** * TITHOUT_TONE:不带声调,例如:差:cha,cha,chai,ci * WITH_TONE_MARK:不带声调(测试出现异常) * WITH_U_UNICODE:带声调,使用数字表示声调,例如:差:cha1,cha4,chai1,ci1 */ format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); pinyin = null; } //对单个字进行转换 public String getCharPinyin(char py) { try { pinyin = PinyinHelper.toHanyuPinyinStringArray(py, format); } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } //当转换的字符串不是汉字的时候就返回null if(pinyin==null) { return null; } //优化,把多音字放到同义词词典中 if(pinyin.length>1) { for(String s : pinyin) { //System.out.println(s); } } //多音字会返回一个多音字拼音的数组,pinyin4j并不能有效判断该字的合适拼音 return pinyin[0]; } //对字符串就行转换 public String getStringPinyin(String py) { StringBuilder sb = new StringBuilder(); String temp = null; //循环字符串 for(int i=0;i<py.length();i++) { temp = this.getCharPinyin(py.charAt(i)); if(temp!=null) { sb.append(temp); }else { sb.append(py.charAt(i)); } } return sb.toString(); } @Test public void test() { char cha = '差'; String str = "出差去广州,go go !"; String chaPy = getCharPinyin(cha); System.out.println(cha+" 翻译成拼音为:"+chaPy); String strPy = getStringPinyin(str); System.out.println(str+" 翻译成拼音为:"+strPy); } }
结果:
分析:
在多音字方面确实存在不少问题,会导致在一些使用情况下出现异常!