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());  
            }  
        }  
    }  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值