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

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<Character, Integer> Arab2Chinese = new HashMap<Character, Integer>() {
{
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<Character, Integer> UnitMap = new HashMap<Character, Integer>() {
{
put('十', 10);
put('百', 100);
put('千', 1000);
put('万', 10000);
put('亿', 10000 * 10000); }
}; //正则提取
private static Pattern pattern = Pattern.compile("[零一二三四五六七八九十]?[十百千万亿]?"); /**
* 处理思路:
* <p>
* 可能的类型:
* 一千三百万 130000000
* 十一 11
* 一万 10000
* 一百二十五 125
* <p>
* 通过正则将字符串处理为 数字+单位的情况
* 然后处理的时候通过数字*单位+数字*单位...得到最后结果
*
* @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;
} }

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

最新文章

  1. linux创建静态库
  2. React 点击按钮显示div与隐藏div,并给div传children
  3. request模块提交数据
  4. 理解I/O Completion Port
  5. 各种浏览器的agent信息(IE Chrome Safari Firefox)
  6. 数据结构之计算器的实现(JAVA)(四)
  7. logger.go
  8. spark问题
  9. 洛谷P1038神经网络题解
  10. 解压zipfile &amp; tarfile
  11. 【shell编程】1、shell编程简介
  12. [dpdk] service core
  13. [LeetCode&amp;Python] Problem 661. Image Smoother
  14. 【ActiveMQ入门-4】ActiveMQ学习-异步接收
  15. AARRR:数据运营模型
  16. 使用CSS3的@media来实现网页自适应
  17. [翻译]Event Handler Description 事件处理描述
  18. git使用笔记(十四)cat-file
  19. SpringMVC之ModelAndView的 jsp值在浏览页面不显示
  20. 大聊Python----生产消费者模型

热门文章

  1. C# HttpWebRequest 后台调用接口上传大文件以及其他参数
  2. 做高逼格程序员之说走就走的「Linux To Go 」
  3. 浅谈sqlserver的事务锁
  4. java之ThreadLocal详解
  5. golang 服务平滑重启小结
  6. Windows系统调用中API从3环到0环(下)
  7. Web安全之爆破中的验证码识别~
  8. Web渗透之mssql2005 差异备份getshell
  9. Python:的web爬虫实现及原理(BeautifulSoup工具)
  10. ‎Cocos2d-x 学习笔记(11.9) FadeTo FadeIn FadeOut