把大写数字转换成阿拉伯数字后排序

先是把大写数字理解为数值与单位

然后先考虑转换数值,确定了数值,再考虑单位,该位置值即为数值*单位

每次累加即可。

直接上代码把,对应的地方都有注释解释

@Test
    public void t2() {

        List<String> strings = Lists.newArrayList("二十五", "一百零三", "四百五十五", "三百六十", "三十", "五千零三十二");
        strings.sort((o1, o2) -> chinese2int(o1) - chinese2int(o2));
        System.out.println(strings);
        //25 30 103 360 455 5032 
        //[二十五, 三十, 一百零三, 三百六十, 四百五十五, 五千零三十二]
    }

    /**
     * 默认都是正数
     * 只支持10万以内的数值转换
     * @param chinese
     * @return
     */
    private Integer chinese2int(String chinese) {
        String aval = "零一二三四五六七八九";
        String bval = "十百千万";
        int num = 0;
        char[] array = chinese.toCharArray();
        for (int ii = 0; ii < array.length; ii++) {
            char c = array[ii];
            //判断是否为0123456789
            if (aval.contains(String.valueOf(c))) {
                char[] chars = aval.toCharArray();
                for (int i = 0; i < chars.length; i++) {
                    if (chars[i] == c) {
                        //判断后面一位的单位,如果包含,则说明有单位,则num为i*对应的单位 否则为个,
                        if (ii + 1 < array.length && bval.contains(String.valueOf(array[ii + 1]))) {
                            char[] chars2 = bval.toCharArray();
                            for (int j = 0; j < chars2.length; j++) {
                                if (chars2[j] == array[ii + 1]) {
                                    num += i * Math.pow(10, j + 1);
                                    break;
                                }
                            }
                        } else {
                            num += i;
                        }

                        break;
                    }
                }
            }
        }
        return num;
    }

有不对的地方欢迎评论区交流,互相学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值