Java中文轉漢語拼音類庫pinyin4j使用示例

em7 9年前發布 | 2K 次閱讀 Java

pinyin4j的java開源類庫,提供中文轉漢語拼音(并且支持多音字)
pinyin4j官方網址:http://pinyin4j.sourceforge.net/

import java.util.HashSet;
import java.util.Set;

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;

public class pinyin4j {

/**

  • 字符串集合轉換字符串(逗號分隔)
  • @author wyh
  • @param stringSet
  • @return */ public static String makeStringByStringSet(Set<String> stringSet){ StringBuilder str = new StringBuilder(); int i=0; for(String s : stringSet){ if(i == stringSet.size() - 1){ str.append(s); }else{ str.append(s + ","); } i++; } return str.toString().toLowerCase(); }

    /**

  • 獲取拼音集合
  • @author wyh
  • @param src
  • @return Set<String> */ public static Set<String> getPinyin(String src){ if(src!=null && !src.trim().equalsIgnoreCase("")){ char[] srcChar ; srcChar=src.toCharArray(); //漢語拼音格式輸出類 HanyuPinyinOutputFormat hanYuPinOutputFormat = new HanyuPinyinOutputFormat();

//輸出設置,大小寫,音標方式等 hanYuPinOutputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); hanYuPinOutputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE) hanYuPinOutputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);

String[][] temp = new String[src.length()][]; for(int i=0;i<srcChar.length;i++){ char c = srcChar[i]; //是中文或者a-z或者A-Z轉換拼音(我的需求,是保留中文或者a-z或者A-Z) if(String.valueOf(c).matches("[\u4E00-\u9FA5]+")){ try{ temp[i] = PinyinHelper.toHanyuPinyinStringArray(srcChar[i], hanYuPinOutputFormat); }catch(BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } }else if(((int)c>=65 && (int)c<=90) || ((int)c>=97 && (int)c<=122)){ temp[i] = new String[]{String.valueOf(srcChar[i])}; }else{ temp[i] = new String[]{""}; } } String[] pingyinArray = Exchange(temp); Set<String> pinyinSet = new HashSet<String>(); for(int i=0;i<pingyinArray.length;i++){ pinyinSet.add(pingyinArray[i]); } return pinyinSet; } return null; }

/**

  • 遞歸
  • @author wyh
  • @param strJaggedArray
  • @return */ public static String[] Exchange(String[][] strJaggedArray){

    String[][] temp = DoExchange(strJaggedArray);
    return temp[0];       
    

    }

    /**

    • 遞歸
    • @author wyh
    • @param strJaggedArray
    • @return */ private static String[][] DoExchange(String[][] strJaggedArray){ int len = strJaggedArray.length; if(len >= 2){
       int len1 = strJaggedArray[0].length;
       int len2 = strJaggedArray[1].length;
       int newlen = len1*len2;
       String[] temp = new String[newlen];
       int Index = 0;
       for(int i=0;i<len1;i++){
           for(int j=0;j<len2;j++){
               temp[Index] = strJaggedArray[0][i] + strJaggedArray[1][j];
               Index ++;
           }
       }
       String[][] newArray = new String[len-1][];
       for(int i=2;i<len;i++){
           newArray[i-1] = strJaggedArray[i];                           
       }
       newArray[0] = temp;
       return DoExchange(newArray);
      
      }else{ return strJaggedArray;
      } }

    /**

  • @param args */ public static void main(String[] args) { String str = "單田芳"; System.out.println(makeStringByStringSet(getPinyin(str)));

}

} </pre>

 本文由用戶 em7 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!