架构师之最优算法之-阿拉伯数字钱转化为中文数字钱(最优)
架构师之最优算法之----阿拉伯数字钱转化为中文数字钱(最优)
1.前言。
如题。
2.例子。
结果为:
4.需要注意的。
(1)注意数组下标技巧,和stringbuffer填充技巧。
(2)注意可以自己选择去不去零。
(3)如果超过10亿,本例子是会报错的,没关系,例子已经做了说明,把倒数第十位和第十位以上单独处理下,最后两个字符串拼起来就可以了。
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亿,本例子是会报错的,没关系,例子已经做了说明,把倒数第十位和第十位以上单独处理下,最后两个字符串拼起来就可以了。