当前位置:首页 > 开发 > 编程语言 > Java > 正文

Java数字小写转换为大写

发表于: 2014-05-11   作者:beijishiqidu   来源:转载   浏览次数:
摘要: 闲来无事,在网上搜索了一些面试的题目,开始练习下,下列代码的作用是把数字转换为大写的,主要是人民币的写法,暂时没有考虑小数位。 package com.fit.test01; import java.math.BigDecimal; import java.util.HashMap; import java.util.Map; import java.util.regex.M
闲来无事,在网上搜索了一些面试的题目,开始练习下,下列代码的作用是把数字转换为大写的,主要是人民币的写法,暂时没有考虑小数位。
package com.fit.test01;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DigitalLowerToUpper {

	private static final Map<String, String> digitDict = new HashMap<String, String>();

	static {

		digitDict.put("0", "零");
		digitDict.put("1", "壹");
		digitDict.put("2", "贰");
		digitDict.put("3", "叁");
		digitDict.put("4", "肆");
		digitDict.put("5", "伍");
		digitDict.put("6", "陆");
		digitDict.put("7", "柒");
		digitDict.put("8", "捌");
		digitDict.put("9", "玖");
		digitDict.put("10", "拾");
	}

	/**
	 * 转换
	 * 
	 * @param obj
	 * @return
	 */
	public static String upper(String obj) {

		if (obj.length() > 17) {
			return "Can not process it!";
		}

		if (obj.length() <= 17 && obj.length() > 16) {
			StringBuffer sb = new StringBuffer();

			BigDecimal db10000 = new BigDecimal("10000000000000000");

			BigDecimal bd = new BigDecimal(obj);

			BigDecimal yushu = bd.remainder(db10000);

			BigDecimal shang = bd.divideToIntegralValue(db10000);

			if (yushu.toString().equals("0")) {
				return sb.append(getYuanzi(shang.toString())).append("亿")
						.append("亿").toString();
			}

			if (yushu.toString().length() < 12) {
				return sb.append(getYuanzi(shang.toString())).append("亿")
						.append("亿").append(upper(yushu.toString())).toString();
			}

			return sb.append(getYuanzi(shang.toString())).append("亿")
					.append(upper(yushu.toString())).toString();
		}

		if (obj.length() <= 16 && obj.length() > 12) {
			StringBuffer sb = new StringBuffer();

			BigDecimal db10000 = new BigDecimal("1000000000000");

			BigDecimal bd = new BigDecimal(obj);

			BigDecimal yushu = bd.remainder(db10000);

			BigDecimal shang = bd.divideToIntegralValue(db10000);

			if (yushu.toString().equals("0")) {
				return sb.append(getYuanzi(shang.toString())).append("万")
						.append("亿").toString();
			}

			if (yushu.toString().length() < 8) {
				return sb.append(getYuanzi(shang.toString())).append("万")
						.append("亿").append(upper(yushu.toString())).toString();
			}

			return sb.append(getYuanzi(shang.toString())).append("万")
					.append(upper(yushu.toString())).toString();
		}

		if (obj.length() <= 12 && obj.length() > 8) {
			StringBuffer sb = new StringBuffer();

			BigDecimal db10000 = new BigDecimal("100000000");

			BigDecimal bd = new BigDecimal(obj);

			BigDecimal yushu = bd.remainder(db10000);

			BigDecimal shang = bd.divideToIntegralValue(db10000);

			if (yushu.toString().length() == 1 && !yushu.toString().equals("0")) {
				return sb.append(getYuanzi(shang.toString())).append("亿")
						.append("零").append(upper(yushu.toString())).toString();
			}

			return sb.append(getYuanzi(shang.toString())).append("亿")
					.append(upper(yushu.toString())).toString();
		}

		if (obj.length() <= 8 && obj.length() > 4) {
			StringBuffer sb = new StringBuffer();

			BigDecimal db10000 = new BigDecimal("10000");

			BigDecimal bd = new BigDecimal(obj);

			BigDecimal yushu = bd.remainder(db10000);

			BigDecimal shang = bd.divideToIntegralValue(db10000);

			if (yushu.toString().length() == 1 && !yushu.toString().equals("0")) {
				return sb.append(getYuanzi(shang.toString())).append("万")
						.append("零").append(upper(yushu.toString())).toString();
			}

			return sb.append(getYuanzi(shang.toString())).append("万")
					.append(upper(yushu.toString())).toString();
		}

		if (obj.length() <= 4) {
			StringBuffer sb = new StringBuffer();

			return sb.append(getYuanzi(obj)).toString();
		}

		String result = "";

		return result;
	}

	/**
	 * 格式化字符串中的零
	 * 
	 * @param obj
	 * @return
	 */
	public static String format(String obj) {

		if (!obj.startsWith("0")) {
			return obj;
		}

		Pattern p = Pattern.compile("^0*");
		Matcher m = p.matcher(obj);

		String result = null;

		if (m.find()) {
			result = obj.substring(m.start() + 1);
			m.replaceFirst("");
		}

		if (result.startsWith("0")) {
			return format(result);
		}

		return result;
	}

	/**
	 * 递归调用的原子方法,以万位进位
	 * 
	 * @param obj
	 * @return
	 */
	public static String getYuanzi(String obj) {

		String format = format(obj);

		StringBuffer sb = new StringBuffer();

		if (format.length() == 0) {
			return sb.toString();
		}

		if (obj.equals("0") && obj.length() == 1) {
			return sb.toString();
		}

		if (format.length() != obj.length()) {
			sb.append("零");
		}

		if (format.length() == 4) {
			String qian = format.substring(0, 1);
			String shengxia = format.substring(1);
			return sb.append(digitDict.get(qian)).append("千")
					.append(getYuanzi(shengxia)).toString();
		}

		if (format.length() == 3) {
			String qian = format.substring(0, 1);
			String shengxia = format.substring(1);
			return sb.append(digitDict.get(qian)).append("佰")
					.append(getYuanzi(shengxia)).toString();
		}

		if (format.length() == 2) {
			String qian = format.substring(0, 1);
			String shengxia = format.substring(1);
			return sb.append(digitDict.get(qian)).append("拾")
					.append(getYuanzi(shengxia)).toString();
		}

		if (format.length() == 1) {
			String qian = format.substring(0, 1);
			if (qian.equals("0")) {
				return sb.toString();
			}
			String shengxia = format.substring(1);
			return sb.append(digitDict.get(qian)).append(getYuanzi(shengxia))
					.toString();
		}

		return sb.toString();
	}

	public static void main(String[] args) {

		// System.out.println(upper("45678123410000010"));
		// System.out.println(upper("40000100000100001"));
		//System.out.println(upper("40000000000000000"));
		//System.out.println(upper("4000000000000"));
		System.out.println(upper("4000000000001"));
		System.out.println(upper("4000001000101"));
		//System.out.println(upper("400000000"));
		//System.out.println(upper("400000001"));
		//System.out.println(upper("400010001"));
		//System.out.println(upper("411110001"));
		//System.out.println(upper("40000"));
		//System.out.println(upper("40001"));
		//System.out.println(upper("40101"));

	}
}


本人在main方法中列举出了一些测试例子,目前为止还么发现问题,哪位高手如果发现了,欢迎大家给我指出来,谢谢。另外,次方法只支持17位一下的转换。

Java数字小写转换为大写

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
1.脚本 <script type="text/jscript"> $(function () { $("#<%=txtFundingEstimatesUpper.
动手写一个转换日期的小方法,虽然很短,但是需要考虑的东西还是挺多的,记录一下。 /// <summar
package Convert; public class Money { public static void main(String[] args) { int num = 1000
填写票据和结算凭证.必须做到标准化.规范化.要要素齐全.数字正确.字迹清晰.不错漏.不潦草.防止涂改.
填写票据和结算凭证.必须做到标准化.规范化.要要素齐全.数字正确.字迹清晰.不错漏.不潦草.防止涂改.
:%s/[A-Z]/\l&/g 全部改小写 非常容易。 另外,gedit中,将','替换成‘,\n',这样全部大写不换行的s
:%s/[A-Z]//l&/g 全部改小写 非常容易。 另外,gedit中,将','替换成‘,/n',这样全部大写不换行的s
在系统中,有一个文本框,要求输入大写字母。但是用户不自觉,只好在程序来控制了。 在网页中,拉一
:%s/[A-Z]/\l&/g 全部改小写 非常容易。 另外,gedit中,将','替换成‘,\n',这样全部大写不换行的s
添加LowercaseRoutesMVC.dll引用。通过“管理—NuGet程序包”搜索LowercaseRoutesMVC,然后点击安装
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号