架构师之最优算法之----阿拉伯数字钱转化为中文数字钱(最优)

1.前言。
  如题。
2.例子。
package test;

public class Test {
	/**
	 * 如果超过10亿,int最大20亿,则只要把超过10亿(倒数第10位到11+的位)的部分抽出来,单独处理即可,这里略去
	 * @param d
	 */
	public static void test(int d) {
		String[] str = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
		String ss[] = new String[] { "元", "拾", "佰", "仟", "万", "拾", "佰", "仟",
				"亿" };
		String s = String.valueOf(d);
		System.out.println(s);
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < s.length(); i++) {
			// 技巧1:利用数组下标刚好对应0-9的特殊性,拼装中文。把123转为"壹","贰","叁"
			String index = String.valueOf(s.charAt(i));
			sb = sb.append(str[Integer.parseInt(index)]);
		}
		// System.out.println(sb.toString());
		String sss = String.valueOf(sb);
		int i = 0;
		for (int j = sss.length(); j > 0; j--) {
			// 技巧二:所谓的后缀,其实是直接按位填充用
			sb = sb.insert(j, ss[i++]);
		}
		System.out.println("不去重复的零:"+sb);
		//去重复的零
		System.out.println("去重复的零:"+sb.toString().replaceAll("零万", "万").replaceAll("零仟", "").replaceAll("零佰",
				"").replaceAll("零拾", "零"));
	}

	public static void main(String[] args) {
		Test d = new Test();
		d.test(900070007);
	}
}


结果为:

900070007
不去重复的零:玖亿零仟零佰零拾柒万零仟零佰零拾柒元
去重复的零:玖亿零柒万零柒元


4.需要注意的。

(1)注意数组下标技巧,和stringbuffer填充技巧。
(2)注意可以自己选择去不去零。
(3)如果超过10亿,本例子是会报错的,没关系,例子已经做了说明,把倒数第十位和第十位以上单独处理下,最后两个字符串拼起来就可以了。

猜你喜欢

转载自nannan408.iteye.com/blog/2117509