昨天老大问我又没有写过中文数字转换成阿拉伯数字,我说没有,我说那应该简单啊,就是将中文对应的数字换成阿拉伯数字就好了啊,比如一就换成1,二就换成2…十换成10。可是那么问题来了…
一十二呢…不能是1102吧…这不就坑爹了吗?一百万呢…所有我苦苦思索,花费了我差不多半天的时间,终于写出了下面的程序。

public static void main(String[] args){Map<Character, String> numberMap = new HashMap<Character, String>();numberMap.put('零', "0");numberMap.put('一', "1");numberMap.put('二', "2");numberMap.put('三', "3");numberMap.put('四', "4");numberMap.put('五', "5");numberMap.put('六', "6");numberMap.put('七', "7");numberMap.put('八', "8");numberMap.put('九', "9");Map<Character, String> numberBit = new HashMap<Character, String>();numberBit.put('十', "10");numberBit.put('百', "100");numberBit.put('千', "1000");numberBit.put('万', "10000");/*** 思路:循环遍历数字字符数组*       举例:*       九                                    把numberMap的key为九取出, 即9*       九十                               把numberMap的key为九取出并乘以numberBit的key为十的值,即9*10=90*       九十一                          把numberMap的key为九取出并乘以numberBit的key为十的值,然后加上numberMap的key为一 的值,即9*10+1=91*       十一                               同上10+1=11*       一百万                          先取出numberMap为一的key的值,然后乘以numberBit的key为百的值,然后乘以numberBit的key为万的值,即1*100*10000=1000000*       一百八十八万           1*100+(8*10+8)*10000=100+88*10000=1880000 *                       */long number = 0;//1008571String chinaNumberStr = "一千二百三十四万五千六百七十八";//12   叁佰贰十 320 三佰二十char[] arrNumber = chinaNumberStr.toCharArray();for (int i = 0; i < arrNumber.length; i++) {char num = arrNumber[i];if (i + 1 < arrNumber.length && numberBit.containsKey(arrNumber[i + 1])) {// 判断后面的汉字是否是位数(十百千万)if (numberMap.containsKey(num)) {// 如果当前的汉字不是位数if(i + 3 < arrNumber.length&&arrNumber[i + 1]=='十'&&numberMap.containsKey(arrNumber[i + 2])){number = number + Integer.parseInt(numberMap.get(num))* Integer.parseInt(numberBit.get(arrNumber[i + 1]));number = number + Integer.parseInt(numberMap.get(arrNumber[i + 2]));number = number * Integer.parseInt(numberBit.get(arrNumber[i + 3]));i=i+2;}else{// 取出当前对应的数字*位数对应倍数累加在number上number = number + Integer.parseInt(numberMap.get(num))* Integer.parseInt(numberBit.get(arrNumber[i + 1]));}} else if (numberBit.containsKey(num)) {// 如果当前的汉字是位数,即当前的汉字和后一个汉字都是位数(比如百万)//则用number直接*后一个位数number = number * Integer.parseInt(numberBit.get(arrNumber[i + 1]));}} else if (numberMap.containsKey(num)) {number = number + Integer.parseInt(numberMap.get(num));} else if (num == '十' && i == 0) {//“十”特殊处理 当出现十八之类的 十在前面的情况number = Integer.parseInt(numberBit.get('十'));}}System.out.println(number);}

其实这个老大只是问我有没有写过类似的程序,并没有让我写它,但是我就是喜欢挑战。唉,主要是想看看我自己有没有这个能力写出这个程序来,我也是给朋友测了测,发现了一些BUG,改了不少,后面还是写出来了。不过还是有点不尽人意的地方,比如:"一千一"转换之后变成1001,这里应该是1100的,所有要想是1100必须是"一千一百"后面得加个百字。这就是这里的不足了。

我刚刚加了一个numberBit.put(‘亿’, “100000000”); 想转下一亿试一试,结果不行,可能我还要继续改进下。这里暂时只能转换千万及千万以下的数字,不过对于一般的转换也足够了,如果转"壹仟壹佰"这种数字的直接改上面的map里面的key就行了。

我的这个算法有点过于复杂,每个程序的思路第一次都会比较复杂,后面多想几次会想出更加简便的算法,所以你们想出了更好的算法欢迎评论。我去改进我的代码了,之后我会把我改进的代码贴上来的。

中文数字转换成阿拉伯数字(一千二百三十四万五千六百七十八-->12345678)相关推荐

  1. python将中文数字转化成阿拉伯数字

    python将中文数字转化成阿拉伯数字 正则表达式提取文本中的数字 中文转化成阿拉伯数字 完整代码 正则表达式提取文本中的数字 这里演示一下文本中提取中文年份 import re m0 = " ...

  2. 如何把excel里面中文小写数字转换成阿拉伯数字

    今天跟大家分享一下如何把excel里面中文小写数字转换成阿拉伯数字 1.打开要处理的Excel文件 2.将E列数据复制一份到F列中并选中 3.点击下图选项(Excel工具箱,百度即可了解详细下载安装信 ...

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

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

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

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

  5. python将英文单词表示的数字转换成阿拉伯数字的代码

    下边内容内容是关于python将英文单词表示的数字转换成阿拉伯数字的内容. import re _known = { 'zero': 0, 'one': 1, 'two': 2, 'three': 3 ...

  6. 把英文转换成数字python_python实现将英文单词表示的数字转换成阿拉伯数字的方法...

    本文实例讲述了python实现将英文单词表示的数字转换成阿拉伯数字的方法.分享给大家供大家参考.具体实现方法如下: import re _known = { 'zero': 0, 'one': 1, ...

  7. php中文数字转化成阿拉伯数字

    function cn2num($string) {if(is_numeric($string)){return $string;}// '仟' => '千','佰' => '百','拾' ...

  8. 数据库的范式,第一、二、三、四、五范式、BC范式,为什么分不清

    这件事,怪我. 数据库范式 的 来历 数据库的规范化(上一篇博客有写到)的程度不同,便有了这么多种范式.数据库范式是数据库设计必不可少的知识,没有对范式的理解,就无法设计出高效率.优雅的数据库,甚至设 ...

  9. 如何将汉语数字转换成阿拉伯数字!

    其实这个题目本身都还有点问题.汉语数字的表达方式何止一两种,而且还有很多不规范的称呼.所以,转换起来也是比较麻烦的.并且由于每个人的叫法不同,因此也不容易判定用户的输入是否合符常理和规范.这就只能靠大 ...

最新文章

  1. mac下使用git的冲突的解决方案
  2. 机器学习知识点(十九)矩阵特征值分解基础知识及Java实现
  3. 洛谷 P1583 魔法照片
  4. Where to Store your JWTs – Cookies vs HTML5 Web Storage--转
  5. python 获得两个数组(List)交集、并集与差集
  6. 神策 2021 数据驱动大会,与“现代营销之父”科特勒的认知同行
  7. (python3.8)pygraphviz的下载安装配置(在python下)最新
  8. javascript-练习-数组数据存li中
  9. ODP.NET数据访问
  10. asp连接mysql数据库增删查_【ASP】ASP对Access数据库的连接、增删改查及ASP的基本语法...
  11. SQL server 2016数据库 下载安装
  12. 《Head First 设计模式》例子的C++实现(2 观察者模式)
  13. 微信网页开发调试的一些方法
  14. Java:实现动态规划的4个经典题型,你都会吗?拒绝做优秀的码农
  15. 厦门大学计算机学院新院长,厦门大学信息学院对口帮扶座谈会在我院顺利召开...
  16. unity3d android访问剪贴板,Airtest 和 poco 的 swipe 接口使用总结
  17. i3处理器_千元英特尔10代I3处理器套装跑分72万?微星差异化赢得市场
  18. 程序员薪酬到底有多高?来看硅谷的工程师统计
  19. CentOS7安装MySQL
  20. c语言程序设计:现代方法 勘误,C语言程序设计基础教程----勘误记录

热门文章

  1. 180420 逆向-DDCTF_WP(Re)
  2. Win11写字板怎么打开?Win11开启写字板的方法
  3. 如何用移动硬盘备份计算机,怎么自动备份电脑资料到移动硬盘
  4. iOS 防止截屏、录屏技术
  5. 福利:tumblr五年驾龄老司机必备利器
  6. 华为手机误删照片,除了相册恢复,还有这招能救命
  7. 腾讯阿里的螺丝钉,一样会生锈!
  8. 为Go语言GC正名-20秒到100微妙的演变史
  9. 基于蜜蜂优化算法优化的卷积神经网络(CNN)图像分类——附代码
  10. properties文件读取