数字转金额问题(java)
2016-01-18 23:57
211 查看
目前只做到能够处理正整数的情况。负数和带小数的情况后续补充。
转载请注明出处http://www.cnblogs.com/johngerwang/p/5140881.html
结果如下:
壹元
壹拾元
壹佰元
壹佰零壹元
壹仟壹佰零壹元
壹仟元
壹仟零壹元
壹万壹仟零壹元
壹万壹仟零壹拾壹元
壹万壹仟壹佰壹拾壹元
壹万零壹元
壹拾万壹仟零壹元
壹拾万零壹佰零壹元
壹佰万零壹佰零壹元
壹佰万零壹佰零壹元
壹仟万零壹佰零壹元
壹亿零壹佰零壹元
转载请注明出处http://www.cnblogs.com/johngerwang/p/5140881.html
package com.wang.money; public class MoneyFormat { static String chinese[] = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; static String unit[] = { "元","拾", "佰", "仟","万","拾","佰","仟","亿","拾","佰","仟","万","拾","佰","仟","万"}; public static void main(String[] args) { public static void main(String[] args) { String[] money = { "1", "10", "100", "101", "1101", "1000", "1001", "11001", "11011", "11111", "10001", "101001", "100101", "1000101", "1000101", "10000101", "100000101" }; for (int i = 0; i < money.length; i++) { convert(money[i]); } } public static void convert(String money) { String result = ""; int index = 0; for (int i = money.length() - 1; i >= 0; i--) { //字符0的ascii码是48。 result = chinese[money.charAt(i) - 48] + unit[index++] + result; } result = adjustZero(result); System.out.println(result); } public static String adjustZero(String money) { //下面3句是最特殊的,不需要补零的场景,所以先处理。 //一百亿1000 0000 0000 /一切亿10000 0000 0000 的情况:不要写成零亿,所以以(零佰)*零拾零亿作为正则表达式。 money = money.replace("(零佰)*零拾零亿", "亿"); //一百万1000 0000 /一千万10000 0000 的情况:(零佰)*零拾零亿,不要写成零万,所以以(零佰)*零拾零万作为正则表达式。 money = money.replace("(零佰)*零拾零万", "万"); //一千1000/一百100,不要写成零元,所以以"(零佰)*零拾零元"作为正则表达式。 money = money.replace("(零佰)*零拾零元", "元"); //下面3句,因为在元,万,亿级别上都会存在,拾百千,所以优先处理。 //如果是千位上是0,则转成零 money = money.replaceAll("零+仟", "零"); //如果是百位上是0,则转成零。为什么需要+,原因是因为可能上一句千位上的转换带来了一个零。 money = money.replaceAll("零+佰", "零"); //如果是十位上是0,则转成零。为什么需要+,原因是因为可能上一句佰位上的转换带来了一个零。 money = money.replaceAll("零+拾", "零"); //经过上面的转换,可能存在零+亿的情况,所以,需要处理。 money = money.replaceAll("零+亿", "亿"); //经过上面的转换,可能存在零+万的情况,所以,需要处理。 money = money.replaceAll("零+万", "万"); //经过上面的转换,可能存在零+元的情况,所以,需要处理。 money = money.replaceAll("零+元", "元"); //经过上面的转换,只剩下1001这种情况了,所以处理成一个零。 money = money.replaceAll("零+", "零"); //money = money.replaceAll("零+万", "万")处会出现一个异常情况就是万级别上全是0,而亿级别却有数据,那么万也不需要。 money = money.replace("亿万", "亿"); return money; } }
结果如下:
壹元
壹拾元
壹佰元
壹佰零壹元
壹仟壹佰零壹元
壹仟元
壹仟零壹元
壹万壹仟零壹元
壹万壹仟零壹拾壹元
壹万壹仟壹佰壹拾壹元
壹万零壹元
壹拾万壹仟零壹元
壹拾万零壹佰零壹元
壹佰万零壹佰零壹元
壹佰万零壹佰零壹元
壹仟万零壹佰零壹元
壹亿零壹佰零壹元
相关文章推荐
- java生成二维码
- java与javac版本不一致问题,同时装两个jdk,完美解决iReport不兼容jdk8
- spring依赖注入总结
- 设置JLabel或其他组件透明度
- 关于java 常量接口
- 一月18日 JAVA基础课 switch详细用法
- Java 入门 之 数据类型与存储空间
- JavaSE思维导图(八)
- Java基础_09_Java常见类
- JavaSE思维导图(七)
- spring提供的三种定时任务
- JavaSE思维导图(六)
- java运算符优先级
- JavaSE思维导图(五)
- JavaSE思维导图(四)
- JavaSE思维导图(三)
- JavaSE思维导图(二)
- Spring 事务管理
- JavaSE思维导图(一)
- Java抽象类与抽象方法