数字、钱工具栏

 /**
     * 提取字符串中的 数字 带小数点 ,没有就返回"0"
     *
     * @param money
     * @return
     */
     fun getMoney(money: String): String {
        var money = money
        var pattern = Pattern.compile("(\\d+\\.\\d+)")
        var m = pattern.matcher(money)
        if (m.find()) {
            money = if (m.group(1) == null) "0" else m.group(1) as String
        } else {
            pattern = Pattern.compile("(\\d+)")
            m = pattern.matcher(money)
            money = if (m.find()) {
                if (m.group(1) == null) "" else m.group(1)
            } else {
                "0"
            }
        }
        return money
    }


    /**
     * 汉字转数字
     * 一零零八六:10086
     * 一千零四十五:1045
     */
    fun hanZiToArabic(hanziNumber: String): String {
        val numberMap = mapOf(
            "零" to 0, "一" to 1, "二" to 2, "两" to 2,
            "三" to 3, "四" to 4, "五" to 5, "六" to 6,
            "七" to 7, "八" to 8, "九" to 9
        )
        val unit = mapOf("万" to 10000, "千" to 1000, "百" to 100,"十" to 10)
        //包含计数单位
        var have=false
        run loop@{
            unit.forEach { (s, i) ->
                have =hanziNumber.contains(s)
                if(have){
                    return@loop
                }
            }
        }
        return if(have){//一千零四十五
            val numbers = mutableListOf<Int>()
            unit.forEach { (s, i) ->
                val index = hanziNumber.indexOf(s)
                if(index!=-1){
                    numberMap[hanziNumber[index-1].toString()]?.let {
                        numbers.add(it * i)
                    }
                }
            }
            numberMap[hanziNumber.last().toString()]?.let {
                numbers.add(it)//加上个位数
            }
            numbers.reduce { acc, i ->  acc+i}.toString()//求和
        }else {//一零零八六
            var result = ""
            for (character in hanziNumber) {
                val number = numberMap[character.toString()]
                if (number != null) {
                    result += number
                }
            }
            result
        }
    }

测试:

public class ExampleUnitTest {

    @Test
    public void test(){
        String aa = NumberUtils.INSTANCE.hanZiToArabic("一零五零");
        System.err.println("一零五零 to "+aa);
        String aa2 = NumberUtils.INSTANCE.hanZiToArabic("一万五千六十七");
        System.err.println("一万五千六十七 to "+aa2);
    }
}

运行结果:

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值