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

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;
} }

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

Java 中文数字转换为阿拉伯数字的更多相关文章

  1. C# 阿拉伯数字转换为中文数字/中文数字转换为阿拉伯数字

    项目中经常会格式化数据,转换数字的使用情况比较多,记录一下数字转换的方法! 如果需要转换为繁体中文,将数组里的汉字换成繁体中文即可. 1.阿拉伯数字转换为中文数字 /// <summary> ...

  2. Java实现中文数字转换为阿拉伯数字

    /** * 中文數字转阿拉伯数组[十万九千零六十 --> 109060] * @author 雪见烟寒 * @param chineseNumber * @return */ @Suppress ...

  3. Python 中文数字转阿拉伯数字

    #只能转数字,传参中包含非数字会错. def t(str): zhong={'零':0,'一':1,'二':2,'三':3,'四':4,'五':5,'六':6,'七':7,'八':8,'九':9}; ...

  4. javascript 中文数字阿拉伯数字转换类 Nzh

    之前工作中碰到了数字转中文的情景,网上找的现成方法或多或少不合我的口味,最后还是自已写了一个. 现在整理了一下,补充了繁体,自定义字符,以及反函数(中文数字转阿拉伯数字) 现在发布出来,希望能合大家的 ...

  5. 使用Java将阿拉伯数字转换为中文数字(适配小数转换)

    Java数字转换工具类 简介 该工具类可以将整数.小数.负数转换为中文的数字,如: 0 --> 零 1 --> 一 2.1 --> 二点一 -2.1 --> 负二点一 具体代码 ...

  6. PHP金额工具类之将阿利伯数字转换为大写中文数字

    1.将阿拉伯数字转换为中文大写数字 <?php namespace core\components; class PriceHelper extends \yii\base\Component{ ...

  7. Javascript中将数字转换为中文的方法

    //js实现将数字1234转化为汉字字符串(一千二百三十四)(或大写汉字壹仟贰佰叁拾肆): /*阿拉伯数字转中文数字 中文数字的特点: 每个计数数字都跟着一个权位,权位有:十.百.千.万.亿. 以“万 ...

  8. JAVA处理数字与中文数字互转(最大处理数字不超过万兆即:9999999999999999.9999)

    package practice; import java.util.Arrays; /** * 数字与中文数字互转(最大处理数字不超过万兆即:9999999999999999.9999) * @au ...

  9. Thinkphp将中文年份转换为数字年份的问题

    今天遇到一个问题:想将中文年份转换为数字年份,例如:"二零一六"-->'2016'. 在网上搜了一下,没找到可以直接处理的函数(也许是我搜索信息的能力有限吧>_< ...

随机推荐

  1. 虚拟现实研究经典问卷Presence Questionnaire (PQ) 详细介绍

    虚拟现实(VR)是一种沉浸式体验,它的作用就是将用户完全包裹在一个人为构建出的(数字)虚拟世界中,让用户在这个新环境中得到不一样的体验,或完成一些现实中不能完成的任务.所以让体验者相信“我身处此中”非 ...

  2. 【JavaScript】 控制自适应高度

    <iframe src="需要连接的iframe地址" id="iframepage" name="iframepage" frame ...

  3. 从零开始入门 K8s | Kubernetes 网络概念及策略控制

    作者 | 阿里巴巴高级技术专家  叶磊 一.Kubernetes 基本网络模型 本文来介绍一下 Kubernetes 对网络模型的一些想法.大家知道 Kubernetes 对于网络具体实现方案,没有什 ...

  4. m*n 矩阵中求正方形个数

    <?php /** * Notes: * User: liubing17 * DateTime: 2019-10-17 17:10 */ function get($m, $n){ /* * 获 ...

  5. 并发新构件之DelayQueue:延时队列

    DelayQueue:延时队列,首先是一个队列,所以可以持有对象,但是仅限于实现了Delayed接口的对象.重写getDelay()和compareTo()(因为要比较)方法: 通俗来讲:延时队列的就 ...

  6. centos7升级openssl、openssh常见问题及解决方法

    升级至openssl 1.1.1版本 升级至openssh 8.0版本 openssl version -a   当前查看版本 一.安装telnet (以防升级失败,连不上服务器,建议弄) #查看是否 ...

  7. PowerSploit-CodeExecution(代码执行)脚本渗透实战

    首先介绍一下国外大牛制作的Powershell渗透工具PowerSploit,上面有很多powershell攻击脚本,它们主要被用来渗透中的信息侦察.权限提升.权限维持. 项目地址:https://g ...

  8. USACO环绕岛屿Surround the Islands 并查集 枚举暴力

    题目描述 Farmer John has bought property in the Caribbean and is going to try to raise dairy cows on a b ...

  9. [CF722C] Destroying Array

    C. Destroying Array time limit per test 1 second memory limit per test 256 megabytes input standard ...

  10. java-i++的原理探究

    先看例子: package com.test; publick class Auto{ public static void main(String[] args){ Auto inc=new Aut ...