pinyin4j 汉字转换为拼音 (支持多音字)

来源:互联网 发布:php json保存与读取 编辑:程序博客网 时间:2024/04/26 03:11

使用pinyin4j将汉字转换成拼音需要下载pinyin4j的jar包,这里使用的是pinyin4j-2.5.0.jar;下载地址:http://sourceforge.net/projects/pinyin4j/files/latest/download?source=files

历史各个版本下载地址:http://sourceforge.net/projects/pinyin4j/files/


package com.companyname.system.module.util;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;/************************************************ *  * @Description pinyin4j支持:</P> * 声调格式化。例如:“刘”字的格式化后为“liu2”或“liu”或“liú” </P> * 对特殊拼音ü的的显示格式。例如“u:”或“v”或“ü” </P> * 大小写的转换。例如:“liu2”或“LIU2” *  * @author Rosanu * @date 2012-10-10 20:10:00 * @version V1.0  *************************************************/public class PinYinUtil {public static void main(String[] args) {System.out.println("输出结果:");//字符是单引号,字符串是双引号System.out.println(chineseCharToPinYin('拼', false, ""));//多音字System.out.println(chineseCharToPinYin('乐', true, " "));//中文字符串转换成拼音System.out.println(ChineseStringToPinYin("中文字符串转换成拼音", ""));//有空格System.out.println(ChineseStringToPinYin("中文字符串转换成拼音", " "));}/** * 单个字符转换成拼音 *   * @param chinese 中文字符 * @param isPolyphone 多音字 * @param separator 分隔符(String separator = "line.separator"; //Line separator ("\n" on UNIX) 换行) *  */private static String chineseCharToPinYin(char chinese, boolean isPolyphone, String separator) {        StringBuffer pinyin = new StringBuffer();                // 如果是中文          if (chinese > 128) {        //创建格式化对象    HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();    //设置声调格式    outputFormat.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);    /**     * 方法参数HanyuPinyinToneType有以下常量对象:     * HanyuPinyinToneType.WITH_TONE_NUMBER 用数字表示声调,例如:liu2     * HanyuPinyinToneType.WITHOUT_TONE 无声调表示,例如:liu     * HanyuPinyinToneType.WITH_TONE_MARK 用声调符号表示,例如:liú     *      * */        //设置特殊拼音ü的显示格式    outputFormat.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);        /**     * 方法参数HanyuPinyinVCharType有以下常量对象:     * HanyuPinyinVCharType.WITH_U_AND_COLON 以U和一个冒号表示该拼音,例如:lu:     * HanyuPinyinVCharType.WITH_V 以V表示该字符,例如:lv     * HanyuPinyinVCharType.WITH_U_UNICODE 以ü表示     *      * */        //设置大小写格式    outputFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);    /**     * HanyuPinyinCaseType.LOWERCASE 转换后以全小写方式输出     * HanyuPinyinCaseType.UPPERCASE 转换后以全大写方式输出     *      * */    try {    //返回的数组即是该字符的拼音,如上例就是pinYin[0]=liu2,后面的数字代表声调,    //声调为5表示轻读,无声调。之所谓返回数组,是因为被判定的汉字有可能有多个读音。    //如果输入的参数不是汉字,则返回null。    String[] pinYinArray = PinyinHelper.toHanyuPinyinStringArray(chinese, outputFormat);        //System.out.println(concatPinYinStringArray(pinYinArray));        if (pinYinArray == null || pinYinArray.length < 1) {return "";}                //是否区分多音字,默认只查出多音字的第一个拼音                if (isPolyphone && separator != null) {                for (int i = 0; i < pinYinArray.length; i++) {                pinyin.append(pinYinArray[i]);                //不是数组最后一个(拼音的时候)                        if (pinYinArray.length != (i + 1)) {                              //多音字的拼音之间使用分割符号分割开来                          pinyin.append(separator);                          }      }                } else {pinyin.append(pinYinArray[0]);}    } catch (BadHanyuPinyinOutputFormatCombination e) {    // TODO Auto-generated catch block    e.printStackTrace();    }        } else {        pinyin.append(chinese);}                return pinyin.toString();}/** * 将拼音数组转换成拼音字符串 *   * @param pinYinArray 拼音数组(含一个或多个拼音) *  */private static String concatPinYinStringArray(String[] pinYinArray)    {        StringBuffer pinYinStrBuf = new StringBuffer();        if ((null != pinYinArray) && (pinYinArray.length > 0))        {            for (int i = 0; i < pinYinArray.length; i++)            {            pinYinStrBuf.append(pinYinArray[i]);                //line.separator Line separator ("\n" on UNIX) 换行            pinYinStrBuf.append(System.getProperty("line.separator"));            }        } else {return "";}System.out.println("系统属性(换行符):" + System.getProperty("line.separator"));        String outputString = pinYinStrBuf.toString();        return outputString;    }/** * 中文字符串转换成拼音 * @param chinese 中文字符串 * @param separator 分隔符 * */@SuppressWarnings("deprecation")public static String ChineseStringToPinYin(String chinese, String separator) {          // 创建汉语拼音处理类          HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();          // 输出设置:大小写,音标方式          defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);          defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);                    String pinyin = "";          try {          pinyin = PinyinHelper.toHanyuPinyinString(chinese, defaultFormat, separator);          } catch (BadHanyuPinyinOutputFormatCombination e) {              // TODO Auto-generated catch block              e.printStackTrace();          }             return pinyin;  }}
输出结果:
PĪN
LÈ YUÈ
zhongwenzifuchuanzhuanhuanchengpinyin
zhong wen zi fu chuan zhuan huan cheng pin yin


作者声明:本人Rosanu对以上所有任何内容享有版权,转载请注明作者本人Rosanu及出处。向你的厚道致敬。谢谢。


原创粉丝点击