1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > java中文转换数字_Java 中文数字转换为阿拉伯数字

java中文转换数字_Java 中文数字转换为阿拉伯数字

时间:2019-03-03 03:41:35

相关推荐

java中文转换数字_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 /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 = pile("[零一二三四五六七八九十]?[十百千万亿]?");

/**

* 处理思路:

*

* 可能的类型:

* 一千三百万 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;

}

}

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。