论坛首页 Java企业应用论坛

pinyin4j的一个例子(汉语转拼音)

浏览 7755 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (7) :: 隐藏帖 (1)
作者 正文
   发表时间:2009-07-03  
下载地址:[url] http://pinyin4j.sourceforge.net/[/url]
Demo:
package cn.astrocom.itv.vod.server.web.util;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

/**
 * Change chinese to pin yin 中文转拼音
 * 
 * @author chengbao_zhu(chanball)
 * 
 */
public class ChangeZhongWenToPinYin {
	// log
	private static Log log = LogFactory.getLog(ChangeZhongWenToPinYin.class);

	/**
	 * 获取拼音
	 * 
	 * @param zhongwen
	 * @return
	 * @throws BadHanyuPinyinOutputFormatCombination
	 */
	public static String getPinYin(String zhongwen)
			throws BadHanyuPinyinOutputFormatCombination {
		log.debug("-------->>Input ZhongWen=" + zhongwen);

		String zhongWenPinYin = "";
		char[] chars = zhongwen.toCharArray();

		for (int i = 0; i < chars.length; i++) {
			String[] pinYin = PinyinHelper.toHanyuPinyinStringArray(chars[i],
					getDefaultOutputFormat());
			// 当转换不是中文字符时,返回null
			if (pinYin != null) {
				zhongWenPinYin += capitalize(pinYin[0]);
			} else {
				zhongWenPinYin += chars[i];
			}
		}

		log.debug("-------->>Output PinYin=" + zhongWenPinYin);
		return zhongWenPinYin;
	}

	/**
	 * Default Format 默认输出格式
	 * 
	 * @return
	 */
	public static HanyuPinyinOutputFormat getDefaultOutputFormat() {
		HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
		format.setCaseType(HanyuPinyinCaseType.LOWERCASE);// 小写
		format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 没有音调数字
		format.setVCharType(HanyuPinyinVCharType.WITH_U_AND_COLON);// u显示

		return format;
	}

	/**
	 * Capitalize 首字母大写
	 * 
	 * @param s
	 * @return
	 */
	public static String capitalize(String s) {
		char ch[];
		ch = s.toCharArray();
		if (ch[0] >= 'a' && ch[0] <= 'z') {
			ch[0] = (char) (ch[0] - 32);
		}
		String newString = new String(ch);
		return newString;
	}

}

   发表时间:2009-07-06  
楼主,貌似目前的pinyin4j不支持多音字哦
0 请登录后投票
   发表时间:2009-07-08  
每次转的时候,它都会生成一个数组,也就是说转一个词的时候,它会返回几个拼音的数组,这会不会是多音的支持呢,不过一般第一个是最准的,所以我的例子里选的就是第一个
0 请登录后投票
   发表时间:2009-11-04  
pinyin4j支持多音字的。
0 请登录后投票
   发表时间:2009-12-01  
最后一个发音大部分情况下貌似是作为姓氏的发音
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics