Android Java漢字轉拼音總結

jopen 8年前發布 | 9K 次閱讀 Java開發

轉載請表明出處:http://blog.csdn.net/lmj623565791/article/details/23187701    

  開發過程中有時候會遇到使用拼音模糊搜索等功能(典型的就是Android通訊錄了),這時就需要漢字能夠轉化為拼音。


1、Android系統的通訊錄也實現了拼音搜索,所以我們可以偷個懶,直接拿Android系統中的實現類來實現這個功能。

sdk\sources\android-2.3.3-gingerbread-src\com\android\internal\util\HanziToPinyin.java

該類我們無法直接獲取實例或者反射訪問,不過我們可以直接把源碼拷入自己的項目中,然后使用。

概覽:

簡單看一下,就提供了一個get(Sting)方法供使用。

使用方式:

public void testHanziToPinyin()
    {
        ArrayList<Token> list = HanziToPinyin.getInstance().get(
        "單趙 錢 孫 李 周 吳 鄭 王馮 陳 褚 衛 蔣 沈 韓 楊 朱");
        for (Token token : list)
        {
            System.out.print(token.source + " , " + token.target + " , " + token.type);
            System.out.println();
        }
    }
輸出結果:


簡單解釋一下:HanziToPinyin是一個單例,獲得該類實例后,get方法傳入一個字符串,然后會對每個字符串的每個字符進行解析,解析結果存入Token中,

token.source=源 ;token.target=結果,token.type=2(也就是  public static final int PINYIN = 2; 封裝的常量)


2、使用Pinyin4j

首先去http://pinyin4j.sourceforge.net/   下載一個jar包。

主要的幾個類:

PinyinHelper 調用方法的核心類

HanyuPinyinOutputFormat 輸出格式,設置HanyuPinyinCaseType(大小寫),HanyuPinyinToneType(聲調的方式),HanyuPinyinVCharType(V的輸出方式)

使用方式:

String str = "單趙錢孫李周吳鄭王馮陳褚衛abc";
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
        format.setToneType(HanyuPinyinToneType.WITH_TONE_NUMBER);
        for(int i = 0 ; i < str.length() ; i++)
        {
            char c = str.charAt(i);

            String[] vals = PinyinHelper.toHanyuPinyinStringArray(c, format);
            System.out.print(Arrays.toString(vals));
        }

輸出結果:對于非漢字輸出的是返回null

[DAN1, CHAN2, SHAN4][ZHAO4][QIAN2][SUN1][LI3][ZHOU1][WU2][ZHENG4][WANG2, WANG4][FENG2, PING2][CHEN2][CHU3, ZHU3][WEI4]nullnullnull

附上一張官網的圖,關于各種格式組合的結果:

Some combinations of these three output formats are forbidden. For example, '呂'

LOWERCASE
Combination WITH_U_AND_COLON WITH_V WITH_U_UNICODE
WITH_TONE_NUMBER lu:3 lv3 lü3
WITHOUT_TONE lu: lv
WITH_TONE_MARK Exception Exception

UPPERCASE
Combination WITH_U_AND_COLON WITH_V WITH_U_UNICODE
WITH_TONE_NUMBER LU:3 LV3 Lü3
WITHOUT_TONE LU: LV
WITH_TONE_MARK Exception Exception


我附上:HanziToPinyin.java以及Pinyin4J.jar供找不到源碼或者無法正常下載的親們下載,下載地址:http://download.csdn.net/detail/lmj623565791/7161713。











來自: http://blog.csdn.net//lmj623565791/article/details/23187701

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