zxl_ong 发表于 2013-2-5 09:43:17

汉字转化为拼音pinyin4j

汉字转成拼音如果自己实现起来有点麻烦,主要是怕有些汉字转不了,所以就准备使用一个开源的工具Pinyin4j.
      pinyin4j是一个支持将中文转换到拼音的Java开源类库,pinyin4j能够根据中文字符获取其对应的拼音,而且拼音的格式可以定制。pinyin4j的主页:http://pinyin4j.sourceforge.net/
      1.支持简体中文和繁体中文字符;
      2.支持转换到汉语拼音,通用拼音, 威妥玛拼音(威玛拼法), 注音符号第二式, 耶鲁拼法和国语罗马字;
      3.支持多音字,即可以获取一个中文字符的多种发音;
      4.支持多种字符串输出格式,比如支持Unicode格式的字符ü和声调符号(阴平 "ˉ",阳平"ˊ",上声"ˇ",去声"ˋ")的输出。
package com.javaeye.my;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.exception.BadHanyuPinyinOutputFormatCombination;    /*** @className:PinyingUtil.java* @classDescription:拼音操作工具类* @author:xiayingjie* @createTime:2010-10-21*/    public class PinyinUtil {      /**      * 将字符串转换成拼音数组      *       * @param src      * @return      */      public static String[] stringToPinyin(String src) {          return stringToPinyin(src, false, null);      }      /**      * 将字符串转换成拼音数组      *       * @param src      * @return      */      public static String[] stringToPinyin(String src,String separator) {          return stringToPinyin(src, true, separator);      }      /**      * 将字符串转换成拼音数组      *       * @param src      * @param isPolyphone      *            是否查出多音字的所有拼音      * @param separator      *            多音字拼音之间的分隔符      * @return      */      public static String[] stringToPinyin(String src, boolean isPolyphone,            String separator) {          // 判断字符串是否为空          if ("".equals(src) || null == src) {            return null;          }          char[] srcChar = src.toCharArray();          int srcCount = srcChar.length;          String[] srcStr = new String;            for (int i = 0; i < srcCount; i++) {            srcStr = charToPinyin(srcChar, isPolyphone, separator);          }          return srcStr;      }      /**      * 将单个字符转换成拼音      *       * @param src      * @return      */      public static String charToPinyin(char src, boolean isPolyphone,            String separator) {          // 创建汉语拼音处理类          HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();          // 输出设置,大小写,音标方式          defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);          defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);            StringBuffer tempPinying = new StringBuffer();                      // 如果是中文          if (src > 128) {            try {                  // 转换得出结果                  String[] strs = PinyinHelper.toHanyuPinyinStringArray(src,                        defaultFormat);                                                            // 是否查出多音字,默认是查出多音字的第一个字符                  if (isPolyphone && null != separator) {                      for (int i = 0; i < strs.length; i++) {                        tempPinying.append(strs);                        if (strs.length != (i + 1)) {                              // 多音字之间用特殊符号间隔起来                              tempPinying.append(separator);                        }                      }                  } else {                      tempPinying.append(strs);                  }                } catch (BadHanyuPinyinOutputFormatCombination e) {                  e.printStackTrace();            }          } else {            tempPinying.append(src);          }            return tempPinying.toString();      }            public static String hanziToPinyin(String hanzi){          return hanziToPinyin(hanzi," ");      }      /**      * 将汉字转换成拼音      * @param hanzi      * @param separator      * @return      */      public static String hanziToPinyin(String hanzi,String separator){            // 创建汉语拼音处理类            HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();            // 输出设置,大小写,音标方式            defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);            defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);                            String pinyingStr="";            try {                  pinyingStr=PinyinHelper.toHanyuPinyinString(hanzi, defaultFormat, separator);            } catch (BadHanyuPinyinOutputFormatCombination e) {                  // TODO Auto-generated catch block                  e.printStackTrace();            }               return pinyingStr;      }          /**      * 将字符串数组转换成字符串      * @param str       * @param separator 各个字符串之间的分隔符      * @return      */      public static String stringArrayToString(String[] str, String separator) {          StringBuffer sb = new StringBuffer();          for (int i = 0; i < str.length; i++) {            sb.append(str);            if (str.length != (i + 1)) {                  sb.append(separator);            }          }          return sb.toString();      }      /**      * 简单的将各个字符数组之间连接起来      * @param str      * @return      */      publicstatic String stringArrayToString(String[] str){          return stringArrayToString(str,"");      }      /**      * 将字符数组转换成字符串      * @param str       * @param separator 各个字符串之间的分隔符      * @return      */      public static String charArrayToString(char[] ch, String separator) {          StringBuffer sb = new StringBuffer();          for (int i = 0; i < ch.length; i++) {            sb.append(ch);            if (ch.length != (i + 1)) {                  sb.append(separator);            }          }          return sb.toString();      }            /**      * 将字符数组转换成字符串      * @param str       * @return      */      public static String charArrayToString(char[] ch) {          return charArrayToString(ch," ");      }      /**      * 取汉字的首字母      * @param src      * @param isCapital 是否是大写      * @return      */      public static char[]getHeadByChar(char src,boolean isCapital){          //如果不是汉字直接返回          if (src <= 128) {            return new char[]{src};          }          //获取所有的拼音          String []pinyingStr=PinyinHelper.toHanyuPinyinStringArray(src);          //创建返回对象          int polyphoneSize=pinyingStr.length;          char [] headChars=new char;          int i=0;          //截取首字符          for(String s:pinyingStr){            char headChar=s.charAt(0);            //首字母是否大写,默认是小写            if(isCapital){                  headChars=Character.toUpperCase(headChar);               }else{                  headChars=headChar;               }            i++;          }                  return headChars;      }      /**      * 取汉字的首字母(默认是大写)      * @param src      * @return      */      public static char[]getHeadByChar(char src){          return getHeadByChar(src,true);      }      /**      * 查找字符串首字母      * @param src       * @return      */      publicstatic String[] getHeadByString(String src){          return getHeadByString( src, true);      }      /**      * 查找字符串首字母      * @param src       * @param isCapital 是否大写      * @return      */      publicstatic String[] getHeadByString(String src,boolean isCapital){          return getHeadByString( src, isCapital,null);      }      /**      * 查找字符串首字母      * @param src       * @param isCapital 是否大写      * @param separator 分隔符      * @return      */      publicstatic String[] getHeadByString(String src,boolean isCapital,String separator){          char[]chars=src.toCharArray();          String[] headString=new String;          int i=0;          for(char ch:chars){                            char[]chs=getHeadByChar(ch,isCapital);            StringBuffer sb=new StringBuffer();            if(null!=separator){                  int j=1;                                    for(char ch1:chs){                      sb.append(ch1);                      if(j!=chs.length){                        sb.append(separator);                      }                      j++;                  }            }else{                  sb.append(chs);            }            headString=sb.toString();            i++;          }          return headString;      }            public static void main(String[] args) {          System.out.println(stringArrayToString(getHeadByString("我se 心")));      }    }

中文排序资料http://www.blogjava.net/jeff-lau/archive/2007/12/21/169257.html

本文转自http://www.iteye.com/topic/790889
页: [1]
查看完整版本: 汉字转化为拼音pinyin4j