请问java怎么把复杂汉字转为拼音,网上的例子很多汉字不识别!谁能给个实例啊?

解决方案 »

  1.   

    用开源的pinyin4j吧,可以解决你的问题。
    http://sourceforge.net/projects/pinyin4j/files/?source=navbar
      

  2.   

    也可以用数据库,找一个汉字库。然后select 对应的汉字。
      

  3.   

    http://download.csdn.net/detail/qiujiahao/1926342下载字库表
      

  4.   

        package mainApp;  
          
        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 TestPinYin4j  
        {  
        /** 
        * 将汉字转换为全拼 
        *  
        * @param src 
        * @return String 
        */  
        public static String getPinYin(String src)  
        {  
        char[] t1 = null;  
        t1 = src.toCharArray();  
        String[] t2 = new String[t1.length];  
        // 设置汉字拼音输出的格式  
        HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();  
        t3.setCaseType(HanyuPinyinCaseType.LOWERCASE);  
        t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);  
        t3.setVCharType(HanyuPinyinVCharType.WITH_V);  
        String t4 = "";  
        int t0 = t1.length;  
        try  
        {  
        for (int i = 0; i < t0; i++)  
        {  
        // 判断能否为汉字字符  
        // System.out.println(t1[i]);  
        if (Character.toString(t1[i]).matches("[//u4E00-//u9FA5]+"))  
        {  
        t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3);// 将汉字的几种全拼都存到t2数组中  
        t4 += t2[0];// 取出该汉字全拼的第一种读音并连接到字符串t4后  
        }  
        else  
        {  
        // 如果不是汉字字符,间接取出字符并连接到字符串t4后  
        t4 += Character.toString(t1[i]);  
        }  
        }  
        }  
        catch (BadHanyuPinyinOutputFormatCombination e)  
        {  
        e.printStackTrace();  
        }  
        return t4;  
        }   
          
        /** 
        * 提取每个汉字的首字母 
        *  
        * @param str 
        * @return String 
        */  
        public static String getPinYinHeadChar(String str)  
        {  
        String convert = "";  
        for (int j = 0; j < str.length(); j++)  
        {  
        char word = str.charAt(j);  
        // 提取汉字的首字母  
        String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);  
        if (pinyinArray != null)  
        {  
        convert += pinyinArray[0].charAt(0);  
        }  
        else  
        {  
        convert += word;  
        }  
        }  
        return convert;  
        }   
          
        /** 
        * 将字符串转换成ASCII码 
        *  
        * @param cnStr 
        * @return String 
        */  
        public static String getCnASCII(String cnStr)  
        {  
        StringBuffer strBuf = new StringBuffer();  
        // 将字符串转换成字节序列  
        byte[] bGBK = cnStr.getBytes();  
        for (int i = 0; i < bGBK.length; i++)  
        {  
        // 将每个字符转换成ASCII码  
        strBuf.append(Integer.toHexString(bGBK[i] & 0xff));  
        }  
        return strBuf.toString();  
        }   
          
        public static void main(String[] args)  
        {  
        String cnStr = "陈";  
        System.out.println(getPinYin(cnStr));  
        System.out.println(getPinYinHeadChar(cnStr));  
        System.out.println(getCnASCII(cnStr));  
        }  
        }   
    ----------------上门这段程序 此行 :if (Character.toString(t1[i]).matches("[//u4E00-//u9FA5]+"))  
    总报错: Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal character range near index 8
    [/u4E00-/u9FA5]+
      

  5.   

    用pinyin4j。
    char[] ch = "汉字".toCharArray();String[] pinyinHead = PinyinHelper.toHanyuPinyinStringArray(ch[0]);
      

  6.   

    .matches("[\\\u4E00-\\\u9FA5]+")
    .matches("[\u4E00-\u9FA5]+")
    都可以
      

  7.   

    非常感谢 u010863631 和 shine333