中文数字转换成阿拉伯数字-->完美改进版-->全面支持上亿等转换
来源:互联网 发布:nginx 外网ip无法访问 编辑:程序博客网 时间:2024/05/17 12:20
经过将上一个中文数字转换换成阿拉伯数字的改进,已经可以支持上亿转换,其实无非也就是在上一个程序上面加了很多判断….也没有太多的算法什么的可言…但也让我挠了好久的头…下面是修改了的程序,可以看看,拿出来测测,也欢迎各位评论,哪里有BUG。谢谢
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"); numberBit.put('亿', "100000000"); /** * 思路: * 将中文数字字符串变成字符数组,以亿和万为分割点,分割字符数组,并组合成字符串存入numberList集合中 * 举例:"一万二千三百四十五亿六千七百八十九万" 分割成["一万二千三百四十五亿"],["六千七百八十九万"]并存入numberList集合中,此时集合有两个元素。 * 循环numberList集合,在该循环体内在套一层循环来遍历字符数组并按下面的思路计算出对应的值,将numberList集合里面计算出来的其他值相加,得出结果; * 也就是["一万二千三百四十五亿"]+["六千七百八十九万"]=1234500000000+67890000=1234567890000 * 求值思路:循环遍历数字字符数组 * 举例: * 九 把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; String chinaNumberStr = "二十三万一千一百三十八亿"; char[] arrNumber = chinaNumberStr.toCharArray(); List<String> numberList = new ArrayList<String>(); for (int i = 0; i < arrNumber.length; i++) { boolean result = true; String strNum=""; while(result){ char num = arrNumber[i]; if(numberMap.containsKey(num)|| numberBit.containsKey(num)&&Integer.parseInt(numberBit.get(num))<Integer.parseInt(numberBit.get('万'))){ if(++i==arrNumber.length){ result=false; } strNum+=num; }else{ int yiIndex = -1; if ((yiIndex = chinaNumberStr.indexOf("亿")) != -1 && i <= yiIndex) { strNum+=chinaNumberStr.subSequence(i, yiIndex+1); i=i+yiIndex-i; }else{ strNum+=num; } result = false; } } numberList.add(strNum); } System.out.println(numberList); for (String str : numberList) { arrNumber = str.toCharArray(); long num = 0; for (int i = 0; i < arrNumber.length; i++) { char numStr = arrNumber[i]; if (numStr == '十' && i == 0) {//“十”特殊处理 当出现十八之类的 十在前面的情况 num = Integer.parseInt(numberBit.get('十')); }else if (i + 1 < arrNumber.length && numberBit.containsKey(arrNumber[i + 1])) {// 判断后面的汉字是否是位数(十百千万) if (numberMap.containsKey(numStr)) {// 如果当前的汉字不是位数 if(i + 3 < arrNumber.length&&arrNumber[i + 1]=='十'&&numberMap.containsKey(arrNumber[i + 2])){ num = num + Integer.parseInt(numberMap.get(numStr))* Integer.parseInt(numberBit.get(arrNumber[i + 1])); num = num + Integer.parseInt(numberMap.get(arrNumber[i + 2])); num = num * Integer.parseInt(numberBit.get(arrNumber[i + 3])); i=i+2; }else if(i + 2 < arrNumber.length&&i!=0&&arrNumber[i-1]=='十'&&numberMap.containsKey(arrNumber[i])){ num = num + Integer.parseInt(numberMap.get(arrNumber[i])); num = num * Integer.parseInt(numberBit.get(arrNumber[i + 1])); //i=i+1; }else{// 取出当前对应的数字*位数对应倍数累加在number上 num = num + Integer.parseInt(numberMap.get(numStr))* Integer.parseInt(numberBit.get(arrNumber[i + 1])); } } else if (numberBit.containsKey(numStr)) {// 如果当前的汉字是位数,即当前的汉字和后一个汉字都是位数(比如百万) //则用number直接*后一个位数 num = num * Integer.parseInt(numberBit.get(arrNumber[i + 1])); } } else if (numberMap.containsKey(numStr)) { num = num + Integer.parseInt(numberMap.get(numStr)); } } number+=num; } System.out.println(number); }
Alvin_先森
0 0
- 中文数字转换成阿拉伯数字-->完美改进版-->全面支持上亿等转换
- 中文数字转换成阿拉伯数字。
- 将中文数字转换成阿拉伯数字
- 阿拉伯数字转换成中文大写数字
- java中文数字转换成阿拉伯数字
- java 中文大写数字 转换成 阿拉伯数字
- 阿拉伯数字转换为中文数字
- 阿拉伯数字转换为中文数字
- Java实现阿拉伯数字转换成中文大写数字,以及中文大写数字到阿拉伯数字的转换。
- Java实现阿拉伯数字转换成中文大写数字,以及中文大写数字到阿拉伯数字的转换
- 数字转换工具类:将阿拉伯数字转换成中文
- 阿拉伯数字转换成大写数字
- 阿拉伯数字转换成汉语数字
- 阿拉伯数字表示的数字转换成中文习惯读法
- 把一个阿拉伯数字转换成中文数字的算法
- Java-String-阿拉伯数字转换成中文汉字数字
- 很详细的:java中文数字转换成阿拉伯数字
- Java编程案例-将阿拉伯数字转换成中文数字
- 【C语言】小球落地问题
- 界面没有实时刷新更新界面
- 阿里巴巴2015基础平台研发工程师实习生笔试卷
- zoj 3861 Valid Pattern Lock (DFS)
- [授权发表]Shell编程范例之字符串操作
- 中文数字转换成阿拉伯数字-->完美改进版-->全面支持上亿等转换
- 拓扑排序和关键路径
- Java基础知识-对象初始化
- 装黑苹果的那些事儿(以ThinkpadE540为例)
- NHibernate开发入门(.NET ORM框架)
- pdf分享-架构师之路--大型网站技术架构与解决方案
- 运算放大器
- 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记5 Data Structures、Methods、Properties
- [授权发表]Shell编程范例之文件操作