Java实现中文数字比较器

问题

对于 一、二、三、四、五、…、十一 这样的汉字进行排序

代码

(我只需要使用到十位,百以后的个位可以自己测试一下)

public class ChineseNumberUtil {
    
    
    public static int chineseNumber2Int(String chineseNumber){
    
    
        int result = 0;
        int temp = 1;//存放一个单位的数字如:十万
        int count = 0;//判断是否有chArr
        char[] cnArr = new char[]{
    
    '一','二','三','四','五','六','七','八','九'};
        char[] chArr = new char[]{
    
    '十','百','千','万','亿'};
        for (int i = 0; i < chineseNumber.length(); i++) {
    
    
            boolean b = true;//判断是否是chArr
            char c = chineseNumber.charAt(i);
            for (int j = 0; j < cnArr.length; j++) {
    
    //非单位,即数字
                if (c == cnArr[j]) {
    
    
                    if(0 != count){
    
    //添加下一个单位之前,先把上一个单位值添加到结果中
                        result += temp;
                        temp = 1;
                        count = 0;
                    }
                    // 下标+1,就是对应的值
                    temp = j + 1;
                    b = false;
                    break;
                }
            }
            if(b){
    
    //单位{'十','百','千','万','亿'}
                for (int j = 0; j < chArr.length; j++) {
    
    
                    if (c == chArr[j]) {
    
    
                        switch (j) {
    
    
                            case 0:
                                temp *= 10;
                                break;
                            case 1:
                                temp *= 100;
                                break;
                            case 2:
                                temp *= 1000;
                                break;
                            case 3:
                                temp *= 10000;
                                break;
                            case 4:
                                temp *= 100000000;
                                break;
                            default:
                                break;
                        }
                        count++;
                    }
                }
            }
            if (i == chineseNumber.length() - 1) {
    
    //遍历到最后一个字符
                result += temp;
            }
        }
        return result;
    }
}
public class ChineseNameComparator implements Comparator<String> {
    
    
    @Override
    public int compare(String arg0, String arg1) {
    
    
        return Integer.compare(ChineseNumberUtil.chineseNumber2Int(arg0),
                ChineseNumberUtil.chineseNumber2Int(arg1));
    }
}

使用

    /**
     * 测试中文比较器
     */
    @Test
    public void testSort(){
    
    
        ArrayList<String> strings = new ArrayList<>();
        strings.add("十班");
        strings.add("三班");
        strings.add("六班");
        strings.add("一班");
        strings.add("四班");
        strings.add("二班");
        strings.add("五班");
        strings.add("十一班");
        strings.sort(new ChineseNameComparator());
        System.out.println(strings); 
        // [一班, 二班, 三班, 四班, 五班, 六班, 十班, 十一班]

Guess you like

Origin blog.csdn.net/qq_36937684/article/details/120741803
Recommended