java数字中文转数字

public static String ChineseToNumber(String chnStr) {
    Map<String, String> chnNumChar = new HashMap<>();
    chnNumChar.put("零", "0");
    chnNumChar.put("壹", "1");
    chnNumChar.put("贰", "2");
    chnNumChar.put("叁", "3");
    chnNumChar.put("肆", "4");
    chnNumChar.put("伍", "5");
    chnNumChar.put("陆", "6");
    chnNumChar.put("柒", "7");
    chnNumChar.put("捌", "8");
    chnNumChar.put("玖", "9");
    chnNumChar.put("角", "0.1");
    chnNumChar.put("分", "0.01");
    Map<String, String> chnNameValue = new HashMap<>();
    chnNameValue.put("拾", "{value:10, secUnit:false}");
    chnNameValue.put("佰", "{value:100, secUnit:false}");
    chnNameValue.put("仟", "{value:1000, secUnit:false}");
    chnNameValue.put("万", "{value:10000, secUnit:true}");
    chnNameValue.put("亿", "{value:100000000, secUnit:true}");
    Boolean secUnit = false;
    String[] str = chnStr.split("");
    Integer len = 0;
    Integer jlen = 0;
    Integer flen = 0;
    Integer jiao = 0;
    Integer fen = 0;
    Integer jnum = 0;
    Integer fnum = 0;
    String all = "";
    if (chnStr.indexOf("角") > -1 || chnStr.indexOf("分") > -1) {
        double section = 0;
        double rtn = 0;
        double number = 0;

        for (int j = 0; j < str.length; j++) {
            String num = chnNumChar.get(str[j]);
            if ("0.1".equals(num)) {
                jlen = str.length - j;
                jiao = j - 1;
            }
            if ("0.01".equals(num)) {
                flen = str.length - j;
                fen = j - 1;
            }
        }
        //小数
        for (int i = 0; i < str.length; i++) {
            if (str[i] != "整") {
                String num = chnNumChar.get(str[i]);
                if (num != null) {
                    number = Double.parseDouble(num);
                    if (jlen == 1) {
                        if (i == str.length - 4) {
                            section += number;
                        }
                    } else if (jlen == 3) {
                        if (i == str.length - 6) {
                            section += number;
                        }
                    } else {
                        if (i == str.length - 5) {
                            section += number;
                        }
                    }
                } else {
                    if (!"圆".equals(str[i]) && !"元".equals(str[i])) {
                        if (chnNameValue.get(str[i]) == null) {
                            return "error";
                        }
                        String cv = chnNameValue.get(str[i]);
                        Integer unit = JSONObject.parseObject(cv).getInteger("value");
                        secUnit = Boolean.parseBoolean(JSONObject.parseObject(cv).getString("secUnit"));
                        if (secUnit) {
                            section = (section + number) * unit;
                            rtn += section;
                            section = 0;
                        } else {
                            section += (number * unit);
                        }
                    } else {
                        jiao = i + 1;
                    }
                    number = 0;
                }
            }
        }
        if (chnStr.indexOf("分") > -1) {
            fnum = Integer.valueOf(chnNumChar.get(str[fen]));
        } else {
            fnum = Integer.valueOf(chnNumChar.get("零"));
        }
        jnum = Integer.valueOf(chnNumChar.get(str[jiao]));
        section = Double.valueOf((int) section + "." + jnum + "" + fnum);
        all = String.valueOf(rtn + section * 1);
    } else {
        Integer section = 0;
        Integer rtn = 0;
        Integer number = 0;
        //整数
        for (int i = 0; i < str.length - 2; i++) {
            String num = chnNumChar.get(str[i]);
            if (num != null) {
                number = Integer.valueOf(num);
                if (i == str.length - 3) {
                    section += number;
                }
            } else {
                if (chnNameValue.get(str[i]) == null) {
                    return "error";
                }
                String cv = chnNameValue.get(str[i]);
                Integer unit = JSONObject.parseObject(cv).getInteger("value");
                secUnit = Boolean.parseBoolean(JSONObject.parseObject(cv).getString("secUnit"));
                if (secUnit) {
                    section = (section + number) * unit;
                    rtn += section;
                    section = 0;
                } else {
                    section += (number * unit);
                }
                number = 0;
            }
        }
        all = String.valueOf(rtn + section * 1);
    }
    return all;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值