感谢这位辛苦的大佬: http://blog.csdn.net/jjfly999/article/details/51052492#insertcode

项目的需要,把中文的汉字转成纯阿拉伯数字

比如 三千-->3000

但是有的时候可能会输入3千,这样处理就比较麻烦一点

在网上 找了一篇文章(上面的链接),当有大数字的时候,效果不是特别好,所以进行了改进

改进后还可以识别一些变态的写法,比如:100千,300十,30千万,等等

上代码,一共3个java文件:

package com.test;import java.math.BigInteger;  public class ChineseChangeToNumber {    public BigInteger ChineseToNumber(String str){    String str1 = new String();    String str2 = new String();    String str3 = new String();    int k = 0;    boolean dealflag = true;    for(int i=0;i<str.length();i++){//先把字符串中的“零”除去    if('零' == (str.charAt(i))){    str = str.substring(0, i) + str.substring(i+1);    }    }   String chineseNum = str;    for(int i=0;i<chineseNum.length();i++){    if(chineseNum.charAt(i) == '亿'){    str1 = chineseNum.substring(0,i);//截取亿前面的数字,逐个对照表格,然后转换    k = i+1;    dealflag = false;//已经处理    if(!chineseNum.contains("万") && chineseNum.length()>i) {  str3 = str.substring(i+1,chineseNum.length());   }  }    if(chineseNum.charAt(i) == '万'){    str2 = chineseNum.substring(k,i);    str3 = str.substring(i+1);    dealflag = false;//已经处理    }   }    if(dealflag){//如果没有处理    str3 =  chineseNum;    }    BigInteger str1Int=sectionChinese(str1).multiply(new BigInteger("100000000"));  BigInteger str2Int=sectionChinese(str2). multiply(new BigInteger("10000"));  BigInteger str3Int=sectionChinese(str3);    BigInteger result =str1Int.add(str2Int).add(str3Int);  return result;    }    public BigInteger sectionChinese(String str){    int value = 0;  int sectionNum = 0;    for(int i=0;i<str.length();i++){    int v = (int) Tool.intList.get(str.charAt(i));  if(v>=0 && v<=9) {  if(sectionNum==0) {  sectionNum=v;  }else {  sectionNum =sectionNum*10+ v;  }  if(i == str.length()-1) {  value=sectionNum+value;  }  }  if(v == 10 || v == 100 || v == 1000) {  if(i==0) {  sectionNum=1;  }  sectionNum=sectionNum*v;  value=sectionNum+value;  sectionNum=0;  }  }    return new BigInteger(String.valueOf(value));}        }
package com.test;import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;    public class Tool {    //数字位    public static String[] chnNumChar = {"零","一","二","三","四","五","六","七","八","九"};    public static char[] chnNumChinese = {'零','一','二','三','四','五','六','七','八','九'};    //节权位    public static String[] chnUnitSection = {"","万","亿","万亿"};      //权位    public static String[] chnUnitChar = {"","十","百","千"};    public static HashMap intList = new HashMap();    static{    for(int i=0;i<chnNumChar.length;i++){    intList.put(chnNumChinese[i], i);    }    for(char i=0;i<100;i++){    intList.put(new Character((char)(48+i)), new Integer(i));    }   intList.put('十',10);    intList.put('百',100);    intList.put('千', 1000);    }
}

下面的是测试类 :

package com.test;
public class Main {    public static void main(String[] args) {    Main ma = new Main();    Tool to = new Tool();    ma.initMain();    }    public void initMain(){    testChineseToNumber();    }    public void testChineseToNumber(){    ChineseChangeToNumber chineseToNumber = new ChineseChangeToNumber();    String a[]= {  "1","22","333","444",  "三","六","八",  "二十","八十",  "一百","三百",  "一千",  "一万","十万","三十万","二十万","三百万",  "一亿","十亿","二十亿","四百亿","四千亿",  "二十三","四十五","三十六",  "三百二十","六百三十","八百九十",  "三千六百二十","五千七百三十",  "一万二千二百三十六","十万八千六百三十四","二十万三千","二十万零三千","一百万零八千零六十","七百万零五十六","四百万","一千万零八百六十四","八千万零九百八十二",  "一亿零八十","一亿八千六百三十二万三千六百五十二","十亿六千零五十四万三千","九亿零八百六十二", //1,  "三百亿","三百亿零四百八十万三千六百二十","三百亿零三十","三百亿三千万","三百亿零三万",  "3千","4万","4十",  "1千万","3千万","50千万",  "3000万","3456万","34561万",  "3000万800","3亿800万",  "3亿80万88","200亿40万123",  "30千","300十","40十万","40百万",  "30千20","50千4","300十5","40百万80",  };  for(int i=0;i<a.length;i++) {  System.out.println(a[i]+"--->"+chineseToNumber.ChineseToNumber(a[i]));  }  }
}

改进后的 源码  ,来看一下 测试的结果:

1--->1
22--->22
333--->333
444--->444
三--->3
六--->6
八--->8
二十--->20
八十--->80
一百--->100
三百--->300
一千--->1000
一万--->10000
十万--->100000
三十万--->300000
二十万--->200000
三百万--->3000000
一亿--->100000000
十亿--->1000000000
二十亿--->2000000000
四百亿--->40000000000
四千亿--->400000000000
二十三--->23
四十五--->45
三十六--->36
三百二十--->320
六百三十--->630
八百九十--->890
三千六百二十--->3620
五千七百三十--->5730
一万二千二百三十六--->12236
十万八千六百三十四--->108634
二十万三千--->203000
二十万零三千--->203000
一百万零八千零六十--->1008060
七百万零五十六--->7000056
四百万--->4000000
一千万零八百六十四--->10000864
八千万零九百八十二--->80000982
一亿零八十--->100000080
一亿八千六百三十二万三千六百五十二--->186323652
十亿六千零五十四万三千--->1060543000
九亿零八百六十二--->900000862
三百亿--->30000000000
三百亿零四百八十万三千六百二十--->30004803620
三百亿零三十--->30000000030
三百亿三千万--->30030000000
三百亿零三万--->30000030000
3千--->3000
4万--->40000
4十--->40
1千万--->10000000
3千万--->30000000
50千万--->500000000
3000万--->30000000
3456万--->34560000
34561万--->345610000
3000万800--->30000800
3亿800万--->308000000
3亿80万88--->300800088
200亿40万123--->20000400123
30千--->30000
300十--->3000
40十万--->4000000
40百万--->40000000
30千20--->30020
50千4--->50004
300十5--->3005
40百万80--->40000080

转换的效果还是可以的.

汉字数字转阿拉伯数字 和 阿拉伯数字+千/百/万/亿 转阿拉伯数字相关推荐

  1. 数字孪生:如何撑起一个万亿市场的产业变革?

    很多人在工作或生活中中都或多或少说过数字孪生.在过去几年,这个词的热度不断攀升,频繁出现在各大峰会论坛.甚至在北京冬奥会的远程协作中,可谓是备受行业内外人员的关注. 那么究竟什么是数字孪生?核心技术有 ...

  2. python123数字转换_Python将汉字数字转换成阿拉伯数字的方法

    用Python将汉字数字转换成阿拉伯数字的方法.汉字数字就是我们的大写数字:零.壹.贰.叁.肆.伍.陆.柒.捌.玖.拾,这种只有在会计人员才会常用的数字. Python把用汉字表示的数字转换为阿拉伯数 ...

  3. python 汉字数字转阿拉伯数字

    主要用于大写数字转阿拉伯数字 CN_NUM = {'〇': 0, '一': 1, '二': 2, '三': 3, '四': 4, '五': 5, '六': 6, '七': 7, '八': 8, '九' ...

  4. 《读九章算术学Python》如何用Python编程实现阿拉伯数字转换成汉字数字?

    第6章 数量转换 Python编程基础 字典 字符串操作 if-elif-else语句 递归 前面的输入和输出都是阿拉伯数字,这一章我们来看一下如何实现阿拉伯数字和汉字数字之间的相互转换. 6.1 阿 ...

  5. Python将汉字数字转换成阿拉伯数字的方法

    Python将汉字数字转换成阿拉伯数字的方法 - 玩蛇网 http://www.iplaypy.com/code/base/b2600.html 用Python语言来为不同数字之间做转换之前就有介绍过 ...

  6. 批量将文件中汉字数字替换为阿拉伯数字

    批量将文件中汉字数字替换为阿拉伯数字 我们有时候遇到很多是中文名文件名, 比如 第一章.第二十九章等文件,排序的时候无法按照顺序排列 而将其一一替换为阿拉伯数字很麻烦, 我花了一晚上弄出的代码如下保存 ...

  7. java实现 阿拉伯数字转换为汉字数字 算法

    package test; public class NumberFormatTest { static String[] units = { "", "十", ...

  8. JAVA 数字转汉字数字

    思路: 创建0至9的汉字数组和单位数组,方便下面取出对应汉字及单位 先转成数组,从左到右转汉字,取对应的单位. 遇到 0 和 单位级别切换时,需要注意单位完整性 代码: public static S ...

  9. java 数字转换成汉字_Java-String-阿拉伯数字转换成中文汉字数字

    package com.test; public class NumberUtils { private static final String[] UNITS = { "", & ...

最新文章

  1. 关于微分方程的初值条件和边界条件(狄里克雷(Dirichlet)条件、诺依曼(Neumann)条件、洛平(Robin)条件)
  2. 反射中getMethods 与 getDeclaredMethods 的区别
  3. 优秀logo设计解析_优秀Logo设计!汽车类标志表现手法
  4. 数据中心冷却技术在企业持续发展中的应用
  5. #讲座#低碳经济0814
  6. date、sleep和usleep命令
  7. 盘点物联网的4个认知误区
  8. 【Jetson Nano学习笔记】3. ORB-SLAM3运行双目Demo(ZED 2i)
  9. 三维向量变化为角度_物体的三维识别与6D位姿估计:PPF系列论文介绍(四)
  10. java中软填空面试题,通过这9个Java面试题,就可以入职华为啦
  11. 通过radius给ppp客户端分配ip地址
  12. 设计模式09_代理模式
  13. WinAPI: GetNextWindow - 获取指定窗口Z上或Z下的窗口的句柄
  14. 【秋色动人xp情侣主题】
  15. 数学建模 matlab MATLAB机器学习 分类方法 支持向量机分类 乳腺癌的诊断
  16. 在线简洁Logo制作
  17. Android技能树 — 动画小结
  18. win10 yolov5 tensorRT 部署
  19. datasets DatasetDict类
  20. 安卓数据恢复_精心整理20款数据恢复软件(含电脑端,安卓,苹果)

热门文章

  1. 淘宝面试回来,想对程序员们谈谈
  2. 使用 HTML、CSS 和 JS 创建响应式可过滤的游戏+工具展示页面
  3. TKImageView-可定制样式的图片裁剪工具类
  4. JAVA三目运算符(条件运算符)单层和多层
  5. 使用Python的eyed3库修改MP3 tag
  6. Python 利用Turtle模块绘制国际象棋棋盘
  7. 借贷宝是真的吗?有到账的吗?多久到账?到账了没?——笔者亲测已到账,附提款、到账截图...
  8. 工业互联网安全从身份认证和数据加密开始
  9. 利用路径多样性提高巨型星座系统性能
  10. new一个对象竟然不是原子操作?