Java 中文数字转换为阿拉伯数字

贴出代码,方便学习交流,稍后放出镜像问题的代码

package com.thunisoft.cail.utils;

import com.sun.istack.internal.NotNull;

import java.security.InvalidParameterException;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @Author dengchengchao
 * @Time 2018/5/22
 * @Description 处理数字的工具类
 */
public class DigitUtils {
    //读音与汉字对应的表
    private static final Map Arab2Chinese = new HashMap() {
        {
            put('零', 0);
            put('一', 1);
            put('二', 2);
            put('三', 3);
            put('四', 4);
            put('五', 5);
            put('六', 6);
            put('七', 7);
            put('八', 8);
            put('九', 9);
            put('十', 10);

        }
    };

    /**
     * 单位对应数量级的表
     */
    private static final Map UnitMap = new HashMap() {
        {
            put('十', 10);
            put('百', 100);
            put('千', 1000);
            put('万', 10000);
            put('亿', 10000 * 10000);

        }
    };

    //正则提取
    private static Pattern pattern = Pattern.compile("[零一二三四五六七八九十]?[十百千万亿]?");



    /**
     * 处理思路:
     * 

* 可能的类型: * 一千三百万 130000000 * 十一 11 * 一万 10000 * 一百二十五 125 *

* 通过正则将字符串处理为 数字+单位的情况 * 然后处理的时候通过数字*单位+数字*单位...得到最后结果 * * @param chinese 汉字输入,比如一千三百二十八 * @return 阿拉伯输入,比如 1328 */ @NotNull public static Integer Chinese2Arab(String chinese) { Objects.requireNonNull(chinese); //判断参数合法性 if (!pattern.matcher(chinese).replaceAll("").trim().equals("")) { throw new InvalidParameterException(); } Integer result = 0; Matcher matcher = pattern.matcher(chinese); //正则提取所有数字 while (matcher.find()) { String res = matcher.group(0); if (res.length() == 2) { result += Arab2Chinese.get(res.charAt(0)) * UnitMap.get(res.charAt(1)); } else if (res.length() == 1) { //处理三十、一百万的情况 if (UnitMap.containsKey(res.charAt(0))) { result *= UnitMap.get(res.charAt(0)); } else if (Arab2Chinese.containsKey(res.charAt(0))) { result += Arab2Chinese.get(res.charAt(0)); } } } return result; } }

没怎么测试,有问题可以留言

你可能感兴趣的:(Java 中文数字转换为阿拉伯数字)