数字转换为大写汉字

在财务类的开发中,常用到数字和大写汉字的转换,个人写了一个方法,希望可供参考:

import java.util.HashMap;
import java.util.Map;

public class Number_ChineseDemo {

	public static void main(String[] args) {
		//测试数据
		String numString="53621452454651";
		String chineseNumberString=getChineseString(numString);
		System.out.println(chineseNumberString);

	}

	public static String getChineseString(String numString) {
		// 壹贰叁肆伍陆柒捌玖零
		Map<Integer, String> numStr = new HashMap<Integer, String>();
		numStr.put(1, "壹");
		numStr.put(2, "贰");
		numStr.put(3, "叁");
		numStr.put(4, "肆");
		numStr.put(5, "伍");
		numStr.put(6, "陆");
		numStr.put(7, "柒");
		numStr.put(8, "捌");
		numStr.put(9, "玖");
		numStr.put(0, "零");
		//
		Map<Integer, String> strMap = new HashMap<Integer, String>();
		strMap.put(1, "元");
		strMap.put(2, "拾");
		strMap.put(3, "佰");
		strMap.put(4, "仟");
		strMap.put(5, "万");
		strMap.put(6, "拾");
		strMap.put(7, "佰");
		strMap.put(8, "仟");
		strMap.put(9, "亿");
		strMap.put(10, "拾");
		strMap.put(11, "佰");
		strMap.put(12, "仟");
		strMap.put(13, "万");
		strMap.put(14, "拾");

		StringBuilder numSBuilder = new StringBuilder(numString);
		numString = numSBuilder.toString();
		while (numString.startsWith("0")) {
			numSBuilder.deleteCharAt(0);
			numString = numSBuilder.toString();
		}
		char[] numchars = numString.toCharArray();
		StringBuilder sBuilder = new StringBuilder();
		for (int i = 0; i < numchars.length; i++) {
			int num = Integer.parseInt(numchars[i] + "");
			int index = numchars.length - i;
			if (index == numchars.length - 1) {
				if (num == 0) {
					if (i < numchars.length - 1) {
						if (Integer.parseInt(numchars[i - 1] + "") != 0) {
							sBuilder.append(numStr.get(num));
						}
					}
				} else {
					sBuilder.append(numStr.get(num));
					sBuilder.append(strMap.get(index));
				}

			} else {

				if (index % 4 == 1) {
					if (num == 0) {
						sBuilder.append(strMap.get(index));
					} else {
						sBuilder.append(numStr.get(num));
						sBuilder.append(strMap.get(index));
					}
				} else if (index % 4 == 2) {
					if (num == 0) {
						if (i < numchars.length - 1) {
							if (Integer.parseInt(numchars[i + 1] + "") != 0) {
								sBuilder.append(numStr.get(num));
							}
						}
					} else {
						sBuilder.append(numStr.get(num));
						sBuilder.append(strMap.get(index));
					}
				} else if (index % 4 == 3) {
					if (num == 0) {
						if (i < numchars.length - 2) {
							if (Integer.parseInt(numchars[i + 1] + "") != 0
									&& Integer.parseInt(numchars[i + 2] + "") != 0) {
								sBuilder.append(numStr.get(num));
							}
						}
					} else {
						sBuilder.append(numStr.get(num));
						sBuilder.append(strMap.get(index));
					}
				} else {
					if (num == 0) {
						sBuilder.append(numStr.get(num));
					} else {
						sBuilder.append(numStr.get(num));
						sBuilder.append(strMap.get(index));
					}
				}

			}
			// System.out.println(sBuilder.toString());
		}
		return sBuilder.toString();
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值