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

该博客提供了一个Java工具类`DigitUtils`,用于将中文数字转换为阿拉伯数字。类中包含一个`Chinese2Arab`方法,通过正则表达式匹配并处理中文数字字符串,如'一千三百万'转为13000000。方法内部实现了数字与汉字、单位的映射,并处理了不同长度的中文数字。博主提醒代码未经充分测试,欢迎反馈问题。
摘要由CSDN通过智能技术生成

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

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;

}

}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值