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金额转换,JAVA数字大写金额转换)