johngerwang

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

目前只做到能够处理正整数的情况。负数和带小数的情况后续补充。
转载请注明出处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;
    }
}

结果如下:
壹元
壹拾元
壹佰元
壹佰零壹元
壹仟壹佰零壹元
壹仟元
壹仟零壹元
壹万壹仟零壹元
壹万壹仟零壹拾壹元
壹万壹仟壹佰壹拾壹元
壹万零壹元
壹拾万壹仟零壹元
壹拾万零壹佰零壹元
壹佰万零壹佰零壹元
壹佰万零壹佰零壹元
壹仟万零壹佰零壹元
壹亿零壹佰零壹元

posted on 2016-01-18 23:57  johngerwang  阅读(509)  评论(0编辑  收藏  举报