感谢这位辛苦的大佬: 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. 在ROS中使用奥比中光Orbbec Astra Pro
  2. Linux 基础命令——比较两个文件内容的不同
  3. 查询x,y之间的素数
  4. KISSY 库 demo
  5. 从使用“List list = new ArrayList()”而不是“ArrayList list = new ArrayList()”看面向接口编程
  6. 北航研究生计算机学院,北航计算机学院考研经验
  7. 【小白学习keras教程】十、三种Model Selection方法:k-fold cross-validation,GridSearchCV和RandomizedSearchCV
  8. 实录分享 | 计算未来轻沙龙:深度学习工具专场(PPT下载)
  9. 单片机小白学步系列(二)爱上单片机的一万个理由
  10. android滚动条布局平分,让你的布局滚动起来—ScrollView
  11. NHibernate Antlr.Runtime.NoViableAltException报错
  12. 聊天室私人聊天原理_如何设置极其安全的私人群组聊天
  13. 劫持ZwQuerySystemInformation函数实现进程隐藏
  14. 卡尔曼滤波器:用R语言中的KFAS建模时间序列
  15. android 锁屏_DashClock是Android的锁屏小部件应具备的功能
  16. 三轴加速度传感器的驱动编程
  17. 阿里IOT云平台(二)---10分钟物联网设备接入阿里云IoT平台
  18. NYOJ - [第九届河南省程序设计大赛]宣传墙(DP)
  19. C# 抽象类与接口异同
  20. NetAlly网络测试仪

热门文章

  1. 表达心情的的C语言程序,今天心情好来分享一段代码,嘎嘎嘎
  2. 只有善用能力才能充分发挥
  3. 最新2010年遂宁论坛男女经典/(很有才、很搞笑)
  4. 2022年春招,双非硕士吃透16个软件测试开发技术栈,成功上岸
  5. c++ 字符串与数字相互转换
  6. PHP快速推送微信模板消息
  7. DELPHI 美团验票
  8. 暖心!5岁重伤女孩获30万互助金!支付宝相互宝值得加入吗?
  9. Duplicate class com.amap.api.fence.DistrictItem found in modules location-6.2.0 and navi-3dmap-9.6.
  10. Linux之killall命令