Java實現將中文轉成拼音和ASCII碼

最近項目上遇到一個需求:模糊搜索姓名時既可以輸入漢字也可以輸入拼音進行搜索,這就要求在保存姓名時也要將其拼音保存起來。

好了,廢話不說了,直接上代碼!

實現步驟:

1、pom.xml配置文件引入jar包

<dependency>
     <groupId>com.belerweb</groupId>
     <artifactId>pinyin4j</artifactId>
     <version>2.5.0</version>
</dependency>

2、將代碼實現邏輯封裝成一個工具類

package minyuantec.backupsystem.action;

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 PinyinUtil {

    /**
     * 將漢字轉換爲全拼
     * 
     * @param src
     * @return String
     */
    private static String getPinYin(String src) {
        char[] 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) {
                // 判斷是否爲漢字字符
                if (Character.toString(t1[i]).matches("[\\u4E00-\\u9FA5]+")) {
                    t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3);// 將漢字的幾種全拼都存到t2數組中
                    t4 += t2[0];// 取出該漢字全拼的第一種讀音並連接到字符串t4後
                } else {
                    // 如果不是漢字字符,直接取出字符並連接到字符串t4後
                    t4 = t4 + Character.toString(t1[i]);
                }
            }
        } catch (BadHanyuPinyinOutputFormatCombination var8) {
            var8.printStackTrace();
        }
        return t4;
    }

    /**
     * 中文漢字轉成拼音首字母大寫
     * 
     * @param str
     * @return String
     */
    public static String testPinyinInitial(String name){
        String pinyinInitial = "";
        try {
            char[] charArray = name.toCharArray();
            StringBuilder pinyin = new StringBuilder();
            HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
            // 設置大小寫格式
            defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
            // 設置聲調格式:
            defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
            for (int i = 0; i < charArray.length; i++) {
                // 匹配中文,非中文轉換會轉換成null
                if (Character.toString(charArray[i]).matches("[\\u4E00-\\u9FA5]+")) {
                    String[] hanyuPinyinStringArray = PinyinHelper
                            .toHanyuPinyinStringArray(charArray[i], defaultFormat);
                    if (hanyuPinyinStringArray != null) {
                        pinyin.append(hanyuPinyinStringArray[0].charAt(0));
                    }
                }
            }
            pinyinInitial = pinyin.toString();
            return pinyinInitial;
        } catch (BadHanyuPinyinOutputFormatCombination e) {
            // TODO: handle exception
        }
        return pinyinInitial;
        
    }
    
    //中文漢字轉成ASCII碼
    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 str = "你好世界";
        String pinyin = getPinYin(str);
        System.out.println(pinyin);
        String pinyinInitial = testPinyinInitial(str);
        System.out.println(pinyinInitial);
        String ascii = getCnASCII(str);
        System.out.println(ascii);

    }

}

打印結果爲:

nihaoshijie
NHSJ
e4 bd a0 e5 a5 bd e4 b8 96 e7 95 8c 

 

歡迎關注微信公衆號【Java典籍】,收看更多Java技術乾貨!

  ▼微信掃一掃下圖↓↓↓二維碼關注

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章