Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 聯系人名字多音字的處理方法

Android 聯系人名字多音字的處理方法

編輯:關於Android編程

前言          歡迎大家我分享和推薦好用的代碼段~~ 聲明          歡迎轉載,但請保留文章原始出處:          CSDN:http://www.csdn.net          雨季o莫憂離:http://blog.csdn.net/luckkof 正文   Android在處理多音字的時候使用的是HanziToPinyin.java這個類,該轉換類實現了讀入漢字的unicode碼轉換及對應Pinyin的sortKey生成。   當輸入的是中文的時候就會進入這個轉換類進行soryKey的生成。我們發現【沈】在其分析時候被認作了【chen】進行處理,查看字典發現【沈】是個多音字,也有【chen】的讀音,只是我們不常用到【chen】這個讀音,但是android在對應unicode碼時加入了這個多音字的映射,且如果有兩個讀音,會自動匹配到首字母在前面的讀音。   如:【調】à【diao】而不是【tiao】         【單】à【dan】而不是【shan】   而2.3的處理中【沈】à【shen】, 【單】à【dan】,HanziToPinyin.java與4.0卻是一致的,由此可見,4.0對於漢字的處理相對於2.3並沒有發生變化,而是4.0將不常用的多音字也加入了進來,字庫比2.3更全。   這個問題對於google來說應該不算是問題,對於多音字的支持是google在字庫上面的更全面的增加,它不會關心多音字是否常用。   解決辦法: 若需要修改這個對應關系,我們提供一個解決方法去修改名子的sortKey。 方法如下:   在HanziToPinyin.java其中添加了一個specialCharacters變量,是個unicode碼對應的map. 然後在下面的gettoken方法裡面來判斷輸入的字符是否是自己定義的多音字字符。如果是,那麼將多音字強行指向指定的讀音下面。   如:沈--〉審       賈--〉甲       俞--〉於   目前有三個不常見的多音字的被加入到了Map中,後續如再發現不常用的多音字,按照如上方式加入到map中即可。   代碼片段如下:  
public static Map<String,Character> specialHanzi = new HashMap<String,Character>();  
  
     
  
    static {  
  
                                // A  
  
                                // B  
  
                                // C  
  
                                // D  
  
                                // E  
  
                                // F  
  
                                // G  
  
                                // H  
  
                                // I  
  
                                // J  
  
                specialHanzi.put("8d3e", '\u7532');//賈->甲  
  
                                // K  
  
                                // L  
  
                                // M  
  
                                // N  
  
                                // O  
  
                                // P  
  
                                // Q  
  
                                // R  
  
                                // S  
  
                specialHanzi.put("6c88", '\u5ba1');//沈->審  
  
                                // T  
  
                                // U  
  
                                // V  
  
                                // W  
  
                                // X  
  
                                // Y  
  
                specialHanzi.put("4fde", '\u4e8e');//俞->於  
  
                                // Z  
  
    }  
  
首先定義這個map,  
  
    private Token getToken(char character) {  
  
                if (specialHanzi.get(Integer.toHexString(character)) != null) {  
  
                                character = specialHanzi.get(Integer.toHexString(character));  
  
                }  
  
在private Token getToken(char character) 方法的起始部分加入這句判斷語句。  
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved