pinyin4j的使用(汉字转换PINYIN)

来源:互联网 发布:广电总局知乎 编辑:程序博客网 时间:2024/06/07 07:54

pinyin4j的使用,好像是国人研究的成果,自己研究了下,写了个小demo,粘上来与大家共享:

Java代码 复制代码收藏代码
  1. package com.xawx.util; 
  2.  
  3. import java.util.HashSet; 
  4. import java.util.Set; 
  5.  
  6. import net.sourceforge.pinyin4j.PinyinHelper; 
  7. import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; 
  8. import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; 
  9. import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; 
  10. import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType; 
  11. import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; 
  12.  
  13. public class Pinyin4j 
  14.     /**
  15.      * 字符串集合转换字符串(逗号分隔)
  16.      * @author wyh
  17.      * @param stringSet
  18.      * @return
  19.      */ 
  20.     public static String makeStringByStringSet(Set<String> stringSet) 
  21.     { 
  22.         StringBuilder str = new StringBuilder(); 
  23.         int i = 0
  24.         for (String s : stringSet) 
  25.         { 
  26.             if (i == stringSet.size() -1
  27.             { 
  28.                 str.append(s); 
  29.             } else 
  30.             { 
  31.                 str.append(s + ","); 
  32.             } 
  33.             i++; 
  34.         } 
  35.         return str.toString().toLowerCase(); 
  36.     } 
  37.  
  38.     /**
  39.      * 获取拼音集合
  40.      * @author wyh
  41.      * @param src
  42.      * @return Set<String>
  43.      */ 
  44.     public static Set<String> getPinyin(String src){    
  45.       if(src!=null && !src.trim().equalsIgnoreCase("")){    
  46.        char[] srcChar ;    
  47.        srcChar=src.toCharArray();    
  48.        // 汉语拼音格式输出类 
  49.        HanyuPinyinOutputFormat hanYuPinOutputFormat = new HanyuPinyinOutputFormat();    
  50.        
  51.     // 输出设置,大小写,音标方式等 
  52.        hanYuPinOutputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);     
  53.        hanYuPinOutputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); 
  54.        hanYuPinOutputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);    
  55.            
  56.        String[][] temp = new String[src.length()][];    
  57.        for(int i=0;i<srcChar.length;i++){    
  58.         char c = srcChar[i];    
  59.         // 是中文或者a-z或者A-Z转换拼音(我的需求,是保留中文或者a-z或者A-Z) 
  60.         if(String.valueOf(c).matches("[\\u4E00-\\u9FA5]+")){    
  61.          try{    
  62.           temp[i] = PinyinHelper.toHanyuPinyinStringArray(srcChar[i], hanYuPinOutputFormat);    
  63.          }catch(BadHanyuPinyinOutputFormatCombination e) {    
  64.           e.printStackTrace();    
  65.          }    
  66.         }else if(((int)c>=65 && (int)c<=90) || ((int)c>=97 && (int)c<=122)){    
  67.          temp[i] = new String[]{String.valueOf(srcChar[i])};    
  68.         }else{    
  69.          temp[i] = new String[]{""};    
  70.         }    
  71.        }    
  72.        String[] pingyinArray = Exchange(temp);    
  73.        Set<String> pinyinSet = new HashSet<String>();    
  74.        for(int i=0;i<pingyinArray.length;i++){    
  75.         pinyinSet.add(pingyinArray[i]);    
  76.        }    
  77.        return pinyinSet;    
  78.       }    
  79.       return null;    
  80.      } 
  81.  
  82.     /**
  83.      * 递归
  84.      *
  85.      * @author wyh
  86.      * @param strJaggedArray
  87.      * @return
  88.      */ 
  89.     public static String[] Exchange(String[][] strJaggedArray) 
  90.     { 
  91.         String[][] temp = DoExchange(strJaggedArray); 
  92.         return temp[0]; 
  93.     } 
  94.  
  95.     /**
  96.      * 递归
  97.      *
  98.      * @author wyh
  99.      * @param strJaggedArray
  100.      * @return
  101.      */ 
  102.     private static String[][] DoExchange(String[][] strJaggedArray) 
  103.     { 
  104.         int len = strJaggedArray.length; 
  105.         if (len >= 2
  106.         { 
  107.             int len1 = strJaggedArray[0].length; 
  108.             int len2 = strJaggedArray[1].length; 
  109.             int newlen = len1 * len2; 
  110.             String[] temp = new String[newlen]; 
  111.             int Index = 0
  112.             for (int i =0; i < len1; i++) 
  113.             { 
  114.                 for (int j =0; j < len2; j++) 
  115.                 { 
  116.                     temp[Index] = strJaggedArray[0][i] + strJaggedArray[1][j]; 
  117.                     Index++; 
  118.                 } 
  119.             } 
  120.             String[][] newArray = new String[len -1][]; 
  121.             for (int i =2; i < len; i++) 
  122.             { 
  123.                 newArray[i - 1] = strJaggedArray[i]; 
  124.             } 
  125.             newArray[0] = temp; 
  126.             return DoExchange(newArray); 
  127.         }  
  128.         else 
  129.         { 
  130.             return strJaggedArray; 
  131.         } 
  132.     } 
  133.      
  134.     public staticvoid main(String[] args) 
  135.     { 
  136.         System.out.println(makeStringByStringSet(getPinyin("汉中市"))); 
  137.     }