-
2021-02-12 15:58:36
贴出代码,方便学习交流,稍后放出镜像问题的代码
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 实现
2019-01-31 09:40:15独立开发,实测可用, 将阿拉伯和中文数字组合的字符串转成阿拉伯数字的整型 包。例如: “八万三千20”就可以转成整型 803020 。解压后,引用包。调用方法 在UnitTest.java 中有 -
java实现数字转换人民币中文大写工具
2020-08-26 02:23:47主要为大家详细介绍了java实现数字转换人民币中文大写工具,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
java阿拉伯数字转中文数字
2020-08-26 02:06:09主要为大家详细介绍了java实现阿拉伯数字转换为中文数字,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
java金额数字转中文工具类详解
2020-08-26 02:23:27主要为大家详细介绍了java金额数字转中文工具类的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
Java常用数字工具类 数字转汉字(1)
2020-08-30 14:26:40主要为大家详细介绍了Java常用数字工具类,数字转汉字,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
java数字转汉字工具类详解
2020-08-26 02:25:41主要为大家详细介绍了java数字转汉字工具类的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
java数字转换中文
2021-09-07 16:50:39阿拉伯数字转换中文 转换结果: 23 转成 二十三 2.3 转成 二点三 import java.math.BigDecimal; /** * 数字转换中文 * * @author lbx */ public class DigitalToChineseUtil { private DigitalToChineseUtil...阿拉伯数字转换中文
转换结果:
23 转成 二十三 2.3 转成 二点三
import java.math.BigDecimal; /** * 数字转换中文 * * @author lbx */ public class DigitalToChineseUtil { private DigitalToChineseUtil() { } /** * 中文数字 */ private static final String[] CN_NUM = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"}; /** * 中文数字单位 */ private static final String[] CN_UNIT = {"", "十", "百", "千", "万", "十", "百", "千", "亿", "十", "百", "千"}; /** * 特殊字符:负 */ private static final String CN_NEGATIVE = "负"; /** * 特殊字符:点 */ private static final String CN_POINT = "点"; /** * int 转 中文数字 * 支持到int最大值 * * @param intNum 要转换的整型数 * @return 中文数字 */ public static String int2chineseNum(int intNum) { StringBuffer sb = new StringBuffer(); boolean isNegative = false; if (intNum < 0) { isNegative = true; intNum *= -1; } int count = 0; while (intNum > 0) { sb.insert(0, CN_NUM[intNum % 10] + CN_UNIT[count]); intNum = intNum / 10; count++; } if (isNegative) { sb.insert(0, CN_NEGATIVE); } return sb.toString().replaceAll("零[千百十]", "零").replaceAll("零+万", "万") .replaceAll("零+亿", "亿").replaceAll("亿万", "亿零") .replaceAll("零+", "零").replaceAll("零$", ""); } /** * bigDecimal 转 中文数字 * 整数部分只支持到int的最大值 * * @param bigDecimalNum 要转换的BigDecimal数 * @return 中文数字 */ public static String bigDecimal2chineseNum(BigDecimal bigDecimalNum) { if (bigDecimalNum == null) { return CN_NUM[0]; } StringBuffer sb = new StringBuffer(); //将小数点后面的零给去除 String numStr = bigDecimalNum.abs().stripTrailingZeros().toPlainString(); String[] split = numStr.split("\\."); String integerStr = int2chineseNum(Integer.parseInt(split[0])); sb.append(integerStr); //如果传入的数有小数,则进行切割,将整数与小数部分分离 if (split.length == 2) { //有小数部分 sb.append(CN_POINT); String decimalStr = split[1]; char[] chars = decimalStr.toCharArray(); for (int i = 0; i < chars.length; i++) { int index = Integer.parseInt(String.valueOf(chars[i])); sb.append(CN_NUM[index]); } } //判断传入数字为正数还是负数 int signum = bigDecimalNum.signum(); if (signum == -1) { sb.insert(0, CN_NEGATIVE); } return sb.toString(); } }
-
汉字转数字
2017-05-18 15:11:11汉字转数字 -
java 数字 转换为 汉字
2021-03-05 21:04:49如果用 户输入的字符都为数字,那么将该数字转换为中文的大写表 示 (用户每次最多输入8 个字符)通过命令行输入一串字符,首先判断这些字符是否都为数字。如果其中有字符不是数字,那么直接在命令行上输出“用户输入...通过命令行输入一串字符,首先判断这些字符是否都为数 字。如果其中有字符不是数字,那么直接在命令行上输出用 户输入的字符不都为数字,无法转换,程序结束;如果用 户输入的字符都为数字,那么将该数字转换为中文的大写表 示 (用户每次最多输入8 个字符)
通过命令行输入一串字符,首先判断这些字符是否都为数
字。如果其中有字符不是数字,那么直接在命令行上输出“用
户输入的字符不都为数字,无法转换”,程序结束;如果用
户输入的字符都为数字,那么将该数字转换为中文的大写表
示 (用户每次最多输入8 个字符)。
输入输出示例:
输入:1234567
输出:一百二十三万四千五百六十七
输入:0001
输出:一
输入:1001
输出:一千零一
输入:1100
输出:一千一百
输入:10100
输出:一万零一百
输入:0010
输出:十
输入:00000001
输出:一
输入:10000001
输出:一千万零一
输入:10000010
输出:一千万零十
输入:10000100
输出:一千万零一百
输入:11000000
输出:一千一百万
输入:10100000
输出:一千零十万
输入:10010000
输出:一千零一万
输入:10001000
输出:一千万零一千
输入:a00045
输出:用户输入的字符不都为数字,无法转换
输入:a
输出:用户输入的字符不都为数字,无法转换
package com.javaTest11;
import javax.swing.JOptionPane;
public class ConvertChinese {
public static void main(String[] args) {
String str = " ";
while (!str.equals("")) {
str = JOptionPane.showInputDialog("请输入小于或等于8位的数字进行转换,直接确认为退出.");
try {
Integer.parseInt(str);
} catch (NumberFormatException e) {
System.out.println("用户刷入的不都为数字,无法转换.");
continue;
}
convert(str);
}
}
public static void convert(String str) {
str = str.length() > 8 ? str.substring(0, 8) : str;
while(str.startsWith("0")) {
str = str.substring(1);
}
System.out.println("转换前的有效数字是:/t" + str);
System.out.println("转换后的结果是:/t" + convertToRightFormat(str));
}
private static String convertToRightFormat(String str) {
StringBuffer result = new StringBuffer();
int length = str.length();
boolean bZero = false;
char[] digits = new char[] { '/u0000', '十', '百', '千', '万', '十', '百', '千' };
char[] chs = new char[] { '零', '一', '二', '三', '四', '五', '六', '七', '八', '九' };
for (int i = 0; i < length; i++) {
char ch = chs[Integer.parseInt(str.charAt(i) + "")];
char digit = digits[length - 1 - i];
// 处理零和连续零的情况
if (ch == '零') {
bZero = true;
if (digit == '万') {
result.append('万');
}
continue;
}
if (bZero) {
result.append('零');
bZero = false;
}
// 处理一十的情况
if (digit == '十' && ch == '一') {
result.append("十");
continue;
}
result.append(ch).append(digit);
}
return result.toString();
}
}
-
java实现阿拉伯数字 转换为 汉字数字 算法
2014-06-05 09:44:09java实现阿拉伯数字 转换为 汉字数字 算法 -
java汉字数字转换成阿拉伯数字
2021-02-12 13:17:46private static final Map chineseMap = new HashMap();private static final String yearReg="[一|二|三|四|五|六|七|八|九|十|〇|○]{4}年";private static final String monthReg="(([十][一|二])|([一|二|三|四|...private static final Map chineseMap = new HashMap();
private static final String yearReg="[一|二|三|四|五|六|七|八|九|十|〇|○]{4}年";
private static final String monthReg="(([十][一|二])|([一|二|三|四|五|六|七|八|九|十]))月";
private static final String dayReg="(([十][一|二|三|四|五|六|七|八|九])|(一|二|三|四|五|六|七|八|九|十)|([一|二|三][十][一|二|三|四|五|六|七|八|九]))日";
static{
chineseMap.put("一", "1");
chineseMap.put("元", "1");
chineseMap.put("二", "2");
chineseMap.put("三", "3");
chineseMap.put("四", "4");
chineseMap.put("五", "5");
chineseMap.put("六", "6");
chineseMap.put("七", "7");
chineseMap.put("八", "8");
chineseMap.put("九", "9");
chineseMap.put("〇", "0");
chineseMap.put("○", "0");
chineseMap.put("十", "10");
chineseMap.put("百", "100");
}
protected String regMethod(Pattern pattern, String value) {
Matcher ma = pattern.matcher(value);
if (ma.find()) {
return ma.group();
}
return null;
}
private int judgeChineseData(String value){
int sumNum=0;
int unitValue=0;
for(int i=0;i
char te=value.charAt(i);
int temp=Integer.parseInt(chineseMap.get(String.valueOf(te)));
switch (temp) {
case 100:
if(unitValue==0){
unitValue=1;
}
sumNum+=unitValue*temp;
unitValue=0;
break;
case 10:
if(unitValue==0){
unitValue=1;
}
sumNum+=unitValue*temp;
unitValue=0;
break;
default:
unitValue+=temp;
break;
}
}
sumNum+= unitValue;
return sumNum;
}
2
顶
0
踩
分享到:
2014-02-20 17:14
浏览 5791
评论
-
java 中文转数字
2007-08-12 18:34:09java 中文转数字 -
JAVA中文数字转换为数值
2020-08-28 17:33:07搜了下CSDN,大多都是数值转换为中文的,偶尔有两个中文转数值的只有源码没有说明,不是很敢用,所以只能自己研发。 首先,我们可以把这些金额归为两类,一类是包含阿拉伯数字的,一类是纯中文的,这两类需要分开... -
Java实现数字转成英文的方法
2020-09-03 16:54:46主要介绍了Java实现数字转成英文的方法,涉及java数组与字符串的相关操作技巧,需要的朋友可以参考下 -
java实现阿拉伯数字转汉字数字
2020-08-26 02:24:58主要为大家详细介绍了java实现阿拉伯数字转换为汉字数字源代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
Java 数字转换成汉字
2021-03-22 14:39:07public static String change(String num,int depth){if(depth<0)depth=0;String chinese="";String str=num+"";if(str.length()>4){String str1=str.substring(0,str.length()-4);String str2=str.substring... -
java汉字转成数字
2021-03-26 15:38:38今天做一个日期转换的时候发现有些时间是用大写汉字写成的,需要转换成相应的数字值才能使用SimpleDateFormat进行格式刷。问题描述:在月份和日的时候有十几、二十几、这样的数组出现如果直接转成相应的数组就会转成... -
【Java实现】汉字转化为数字
2021-09-13 21:57:01把一个汉字转化为对应的阿拉伯数字,代码如下: import java.util.*; public class Main { public static void main(String[] args) { Main m=new Main(); System.out.println(m.toNumber("四亿七百六十万五千四... -
Java将数字金额转为大写中文金额
2020-08-25 18:06:01主要为大家详细介绍了Java将数字金额转为大写中文金额,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
java阿拉伯数字转换成中文数字
2021-04-12 23:26:27/***阿拉伯数字转中文数字,中文数字转阿拉伯数字。*2015年10月30日上午10:18:06**@autherliuc*/publicclassNumberConventer{//////阿拉伯數字轉中文/////////publicstaticStringToConvtZH(IntegerintInput){... -
Java方法--汉字数字转阿拉伯数字
2022-05-12 16:25:01解析文本的时候遇到转数字的时候,可以直接用以下方法。 public static int parse(String origin) { int number = 0; switch (origin) { case "一": number = 1; break; case "二": number = 2; -
java 数字转换成汉字
2021-03-22 14:38:20//数字转换成字符串的最简单方法 String result=" "; //直接加一个空字符 //str.length返回的是字符的个数 //循环从0~str的字符个数减1 //System.out.println(str); byte zeroNum=0;//连续零的个数 int q=0; for ... -
JAVA 中文汉字转换阿拉伯数字(最终版,已修复了亿及亿以下的汉数字的转换,超过后的数字,暂时不支持)
2022-05-18 18:36:18* 中文数字转换为阿拉伯数字 * * @param str 需要转换的字符 * @return 返回转换信息,为空则返回00 * @author motcs * @since 2022-05-18 */ private static String convertNumber(St. -
Java将字符串中的中文数字转化成阿拉伯数字或阿拉伯数字转化成中文数字
2021-06-18 08:17:35为更好的处理数据,经常需要将字符串中的中文数字转化成阿拉伯数字或阿拉伯数字转化成中文数字,以下为Java样例程序: public class Test { public static void main(String[] args) { String str = "建议以5... -
Java实现中文数字转换为阿拉伯数字
2021-03-17 21:02:12/** * 将二百一十八转化成218 * 二千零四万 204 * 三亿零六百零七万零九百零六=306070906 * 三千零五十万四千三百二十六亿零六百零七万一千九百零六 *...{Map/*** 中文數字转阿拉伯数组【十万九千零六十 --> 1090... -
数字转换成中文 java实现
2021-02-27 10:53:24/*** * 主要思想,根据数字按四位划分为一级,第一级段位为个、十、百、千,第二级段位为万、亿、万亿。然后根据当前数所属位置来追加所属段数* ** @author ZLi 2017-9-12**/public class NumToChinese {/*** 第一... -
java 中文数字转阿拉伯数字
2021-11-25 16:26:12private static final char[] CN_NUMBER = new char[]{'一', '二', '三', '四', '五', '六', '七', '八', '九'}; public static String replace(String content) { char[] chars = content.toCharArray();... -
Java数字转换成汉字
2021-04-12 18:39:36Java数字转换成汉字 处理小于一亿的数字 输入 输出 10 十 100 一百 9999 九千九百九十九 public class DigitUtil { private static final Map<Integer, String> NUMBNER_MAP = new HashMap<... -
java实现 阿拉伯数字转换为汉字数字 算法
2021-03-23 18:16:45package test; public class NumberFormatTest { static String[] units = { "", "十", "百", "千", "万", "十万", "百万", "千万", "亿", "十亿", "百亿", "千亿", "万亿" }; static char[] numArray = { '零', '一...