JAVA数字大写金额转换
2015-09-15 00:00
591 查看
摘要: 初学Java写的。可以转换万亿以内的数字。写的如有问题。还请大家指出来
package day02; import java.util.HashMap; import java.util.Map.Entry; public class Test2 { private static HashMap<Long, Character> chineseNum = new HashMap<Long, Character>(); // 存储数字对应的中文 private final String[] UNIT = { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿","兆" }; private static HashMap<String, String> special = new HashMap<String, String>(); // 特殊情况 static { chineseNum.put(new Long(0), '零'); chineseNum.put(new Long(1), '壹'); chineseNum.put(new Long(2), '贰'); chineseNum.put(new Long(3), '叁'); chineseNum.put(new Long(4), '肆'); chineseNum.put(new Long(5), '伍'); chineseNum.put(new Long(6), '陆'); chineseNum.put(new Long(7), '柒'); chineseNum.put(new Long(8), '捌'); chineseNum.put(new Long(9), '玖'); // 特殊情况 special.put("零拾", "零"); special.put("零佰", "零"); special.put("零仟", "零"); special.put("零万", "万"); special.put("零亿", "亿"); special.put("亿万", "亿"); special.put("零零", "零"); } public static void main(String[] args) { String money="1234567890123"; String str = new Test2().transformNumber(money); System.out.println(money+" : "+str); } private String transformNumber(String str) { long len = str.length(); // 获取字符的长度 if(len>13) throw new RuntimeException("金额过大,只能转换万亿以内的金额!"); char[] arr = str.toCharArray(); // 转成char数组 StringBuilder sb = new StringBuilder(); // 数字转换 for (int i = 0; i < arr.length; i++) { sb.append(chineseNum.get(Long.parseLong(arr[i] + ""))); // 取得每一位的数字元素,对应集合中的中文汉字 } int temp = 1; // 记录循环到了哪一位 for (long i = (len - 1); i > 0; i--) { sb.insert((int) i, UNIT[temp]); // unit[temp] 表示位数 十位 百位 千位... temp = (temp == 8) ? 1 : temp + 1; // 核心代码.到亿位之后重新循环 } for (Entry<String, String> entry : special.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); while (sb.indexOf(key) != -1) { sb.replace(sb.indexOf(key), sb.indexOf(key) + 2, value); //替换出现的特殊情况 } } //特殊数字:如5005。会出现漏替换的情况。则要将【零零】替换为零 while (sb.indexOf("零零") != -1) { sb.replace(sb.indexOf("零零"), sb.indexOf("零零") + 2, "零"); } // 如果最后一位为零。则去除 if (sb.substring(sb.length() - 1, sb.length()).equals("零")) { sb = new StringBuilder(sb.substring(0, sb.length() - 1)); } return sb.toString(); } }
相关文章推荐
- java中hashmap获取list
- 整合hibernate4到spring4mvc框架
- Java初学笔记
- java学习:this与supper
- java学习:引用
- 关于java runtime.exec()
- java中调用外部exe文件
- Servlet---JavaWeb技术的核心基础,JavaWeb框架的基石(一)
- Javaweb的基础
- Java中的Enum的使用与分析
- 大文件处理【java以及数据清洗相关】
- java.sql.Types,数据库字段类型,java数据类型的对应关系
- Java虚拟机内存模型
- spring下的子项目
- Spring+Mybatis+mysql配置
- Java设计模式之策略模式
- DOM,JAVA
- java单例设计模式
- 启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法
- JAVA 垃圾收集监控