汉字转成拼音如果自己实现起来有点麻烦,主要是怕有些汉字转不了,所以就准备使用一个开源的工具Pinyin4j.        汉子转化成拼音主要是应用了相关对应的字典编码。通过字典编码进行相关的转化,比如:Ascii码。        pinyin4j是一个支持将中文转换到拼音的Java开源类库,pinyin4j能够根据中文字符获取其对应的拼音,而且拼音的格式可以定制。pinyin4j的主页:http://pinyin4j.sourceforge.net/         1. 支持简体中文和繁体中文字符;        2. 支持转换到汉语拼音,通用拼音, 威妥玛拼音(威玛拼法), 注音符号第二式, 耶鲁拼法和国语罗马字;        3. 支持多音字,即可以获取一个中文字符的多种发音;        4. 支持多种字符串输出格式,比如支持Unicode格式的字符ü和声调符号(阴平 "ˉ",阳平"ˊ",上声"ˇ",去声"ˋ")的输出。       5.相关Jar包请自己下载 
package org.lycandjava.util.charactor; 
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:liyingchao  * @createTime:2011-06-23  */      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[srcCount];              for (int i = 0; i < srcCount; i++) {               srcStr[i] = charToPinyin(srcChar[i], 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[i]);                           if (strs.length != (i + 1)) {                               // 多音字之间用特殊符号间隔起来                               tempPinying.append(separator);                           }                       }                   } else {                       tempPinying.append(strs[0]);                   }                  } 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[i]);               if (str.length != (i + 1)) {                   sb.append(separator);               }           }           return sb.toString();       }       /**       * 简单的将各个字符数组之间连接起来       * @param str       * @return       */       public  static 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[i]);               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[polyphoneSize];           int i=0;           //截取首字符           for(String s:pinyingStr){               char headChar=s.charAt(0);               //首字母是否大写,默认是小写               if(isCapital){                   headChars[i]=Character.toUpperCase(headChar);                }else{                   headChars[i]=headChar;                }               i++;           }                      return headChars;       }       /**       * 取汉字的首字母(默认是大写)       * @param src       * @return       */       public static char[]  getHeadByChar(char src){           return getHeadByChar(src,true);       }       /**       * 查找字符串首字母       * @param src        * @return       */       public  static String[] getHeadByString(String src){           return getHeadByString( src, true);       }       /**       * 查找字符串首字母       * @param src        * @param isCapital 是否大写       * @return       */       public  static String[] getHeadByString(String src,boolean isCapital){           return getHeadByString( src, isCapital,null);       }       /**       * 查找字符串首字母       * @param src        * @param isCapital 是否大写       * @param separator 分隔符       * @return       */       public  static String[] getHeadByString(String src,boolean isCapital,String separator){           char[]chars=src.toCharArray();           String[] headString=new String[chars.length];           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[0]);               }               headString[i]=sb.toString();               i++;           }           return headString;       }              public static void main(String[] args) {           System.out.println(stringArrayToString(getHeadByString("我se 心")));           System.out.println(hanziToPinyin("李颖超",""));       }      } 
posted on 2013-05-17 12:22  zhengbeibei  阅读(1584)  评论(0编辑  收藏  举报