pinyin4j 漢字排序

Bean對象:

    public class NameBean {  
        private String name;  

        public String getName() {  
            return name;  
        }  

        public void setName(String name) {  
            this.name = name;  
        }  

        public String getNameFirstChar() {  
            return getFirstChar(name);  
        }  

        // 獲得字符串的首字母 首字符 轉漢語拼音  
        public String getFirstChar(String value) {  
            // 首字符  
            char firstChar = value.charAt(0);  
            // 首字母分類  
            String first = null;  
            // 是否是非漢字  
            String[] print = PinyinHelper.toHanyuPinyinStringArray(firstChar);  

            if (print == null) {  

                // 將小寫字母改成大寫  
                if ((firstChar >= 97 && firstChar <= 122)) {  
                    firstChar -= 32;  
                }  
                if (firstChar >= 65 && firstChar <= 90) {  
                    first = String.valueOf((char) firstChar);  
                } else {  
                    // 認爲首字符爲數字或者特殊字符  
                    first = "#";  
                }  
            } else {  
                // 如果是中文 分類大寫字母  
                first = String.valueOf((char) (print[0].charAt(0) - 32));  
            }  
            if (first == null) {  
                first = "?";  
            }  
            return first;  
        }  
    }  

實現比較的接口:

    public class MyComparator implements Comparator<NameBean> {  
        String ostr1;  
        String ostr2;  

        @Override  
        public int compare(NameBean bean1, NameBean bean2) {  
            ostr1 = bean1.getNameFirstChar();  
            ostr2 = bean2.getNameFirstChar();  

            for (int i = 0; i < ostr1.length() && i < ostr2.length(); i++) {  

                int codePoint1 = ostr1.charAt(i);  
                int codePoint2 = ostr2.charAt(i);  
                if (Character.isSupplementaryCodePoint(codePoint1)  
                        || Character.isSupplementaryCodePoint(codePoint2)) {  
                    i++;  
                }  
                if (codePoint1 != codePoint2) {  
                    // 拼音字符  
                    if (Character.isSupplementaryCodePoint(codePoint1)  
                            || Character.isSupplementaryCodePoint(codePoint2)) {  
                        return codePoint1 - codePoint2;  
                    }  
                    String pinyin1 = pinyin((char) codePoint1);  
                    String pinyin2 = pinyin((char) codePoint2);  

                    if (pinyin1 != null && pinyin2 != null) { // 兩個字符都是漢字  
                        if (!pinyin1.equals(pinyin2)) {  
                            return pinyin1.compareTo(pinyin2);  
                        }  
                    } else {  
                        return codePoint1 - codePoint2;  
                    }  
                }  
            }  
            return ostr1.length() - ostr2.length();  
        }  

        // 獲得漢字拼音的首字符  
        private String pinyin(char c) {  
            String[] pinyins = PinyinHelper.toHanyuPinyinStringArray(c);  
            if (pinyins == null) {  
                return null;  
            }  
            return pinyins[0];  
        }  
    }  

測試:

    public class TestMain {  
        public static void main(String[] args) {  
                    String[] strs = {"阿爾巴利亞語", "阿拉伯語", "阿姆哈拉語", "阿塞拜疆語", "愛爾蘭語", "愛沙尼亞語 ", "保加利亞語", "波蘭語", "波斯尼亞語", "波斯尼亞語", "波斯語", "朝鮮語", "丹麥語", "德語", "迪維希語", "俄語", "法語", "梵語", "菲律賓語", "芬蘭語", "佛來芒語", "剛果語", "哈薩克語", "韓語", "豪薩語", "荷蘭語", "吉爾吉斯語", "加泰羅尼亞語", "柬埔寨語", "捷克語", "克羅地亞語", "克什米爾語", "庫爾德語", "拉丁語", "拉脫維亞語", "老撾語", "立陶宛語", "盧森堡語", "羅馬尼亞語", "馬達加斯加語", "馬地拉語", "馬耳他語", "馬來語", "馬其頓語", "蒙古語", "孟加拉語", "緬甸語", "苗語", "瑙魯語", "尼日爾語", "挪威語", "葡萄牙語", "普什圖語", "日語", "瑞典語", "塞爾維亞語", "僧伽羅語", "僧伽羅語", "世界語", "斯洛伐克語", "斯洛文利亞語", "斯瓦西里語", "蘇丹語","蘇格蘭語", "索馬里語", "泰米爾語", "泰語", "土耳其語", "維吾爾語", "烏爾都語", "烏克蘭語", "烏茲別克語", "西班牙語", "希伯來語", "希臘語", "匈牙利語", "意大利語", "印地語", "印尼語", "香港和臺灣繁體", "英語", "越南語", "壯語", "藏語"};
            List<NameBean> arrList = new ArrayList<NameBean>();  
            for (String s : str) {  
                NameBean bean = new NameBean();  
                bean.setName(s);  
                arrList.add(bean);  
            }  

            MyComparator compare = new MyComparator();  
            Collections.sort(arrList, compare);  

            for (NameBean b : arrList) {  
                System.out.println(b.getNameFirstChar() + ";" + b.getName());  
            }  
        }  
    }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章