`
yxgyh
  • 浏览: 268348 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Java把汉字转拼音

    博客分类:
  • JAVA
阅读更多
/**  
 * 汉字转换位汉语拼音,英文字符不变  
 * @author xuke  
 *  
 */  
public class Cn2Spell {   
    
    /**  
    * 汉字转换位汉语拼音首字母,英文字符不变  
    * @param chines 汉字  
    * @return 拼音  
    */  
    public static String converterToFirstSpell(String chines){          
        String pinyinName = "";   
        char[] nameChar = chines.toCharArray();   
        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();   
        defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);   
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);   
        for (int i = 0; i < nameChar.length; i++) {   
            if (nameChar[i] > 128) {   
                try {   
                    pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0].charAt(0);   
                } catch (BadHanyuPinyinOutputFormatCombination e) {   
                    e.printStackTrace();   
                }   
            }else{   
                pinyinName += nameChar[i];   
            }   
        }   
        return pinyinName;   
    }   
    
    /**  
    * 汉字转换位汉语拼音,英文字符不变  
    * @param chines 汉字  
    * @return 拼音  
    */  
    public static String converterToSpell(String chines){           
        String pinyinName = "";   
        char[] nameChar = chines.toCharArray();   
        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();   
        defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);   
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);   
        for (int i = 0; i < nameChar.length; i++) {   
            if (nameChar[i] > 128) {   
                try {   
                    pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0];   
                } catch (BadHanyuPinyinOutputFormatCombination e) {   
                    e.printStackTrace();   
                }   
            }else{   
                pinyinName += nameChar[i];   
            }   
        }   
        return pinyinName;   
    }   
       
    public static void main(String[] args) {   
        System.out.println(converterToFirstSpell("欢迎来到最棒的Java中文社区"));   
    }   
}  

 

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)));   
  
}   
  
} 

 

控制台输出:dantianfang,shantianfang,chantianfang

分享到:
评论
14 楼 luowuping 2012-09-03  
怎么好多都是不正确。还是谢谢啦,
13 楼 DonTide 2012-09-03  
你牛,很想要这个东西。呵呵!谢谢分享。
12 楼 assoloist 2012-08-13  
高手!支持一下!
11 楼 DefallDevil 2012-06-11  
thanks,受益啦
10 楼 eyesurf 2012-05-28  
很实用,经常会用到
9 楼 wangjy 2012-03-07  
非常的好用,^_^
8 楼 xinming_me 2012-01-14  
楼主,人才啊。学习
7 楼 tianhandigeng 2011-12-07  
感觉不是那么准确,中文输入“成都”,转换成的是“chengdou”
6 楼 wst302 2011-11-16  
学习,正好用到
5 楼 derekkuo 2011-06-14  
感谢哦,能直接用上:)
4 楼 acegi13579 2011-06-02  
直接能运行、、呵呵、、、感谢分享
3 楼 379427555 2011-04-22  
好好好
好好好
好好好
好好好
好好好
好好好
好好好
好好好
好好好
2 楼 Zhliang 2010-05-13  
自动收索功能上能用到这些
1 楼 ldeng76 2009-10-31  
很有用,非常感谢分享.

相关推荐

Global site tag (gtag.js) - Google Analytics