Pinyin4j实战

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+"\n翻译成拼音为:"+chaPy);
		String strPy = getStringPinyin(str);
		System.out.println(str+"\n翻译成拼音为:"+strPy);
	}

}

  结果:

  分析:

    在多音字方面确实存在不少问题,会导致在一些使用情况下出现异常!

猜你喜欢

转载自www.cnblogs.com/yszd/p/9492239.html
今日推荐