java方式实现数字转换成中文大写

public String getNumberToRMB(String rmb) {
/*
* 人民币表达式中使用的中文字符(num)及计量单位位字符(dw)
*/
String num = "零壹贰叁肆伍陆柒捌玖";
String dw = "元拾佰仟万亿";
// 补齐小数位,多加“0”不影响计算和转换
rmb += rmb.indexOf(".") == -1 ? ".00" : "00";
String mm[] = rmb.split("//.");
String money = mm[0];
/*
* 转换小数部分
*/
String result = num.charAt(Integer.parseInt("" + mm[1].charAt(0)))
+ "角" + num.charAt(Integer.parseInt("" + mm[1].charAt(1)))
+ "分";
/*
* 设置循环,从整数最低位开始转换
*/
for (int i = 0; i < money.length(); i++) {// i=位数,从个位开始取值
String str = "";// 设置人民币大写字符初值
int n = Integer.parseInt(money.substring(money.length() - i - 1,
money.length() - i));// 当前位的数值=n
str = str + num.charAt(n);// 根据数值取出人民币中文大写字符
if (i == 0) {// 根据位数判断
str = str + dw.charAt(i);// 加上元
} else if ((i + 4) % 8 == 0) {
str = str + dw.charAt(4);// 加上万
} else if (i % 8 == 0) {
str = str + dw.charAt(5);// 加上亿
} else {
str = str + dw.charAt(i % 4);// 不为整就求余
}
result = str + result;// 把当前字符加到最前面(最高位)
}
result = result.replaceAll("零([^亿万元角分])", "零");
result = result.replaceAll("亿零+万", "亿零");
result = result.replaceAll("零+", "零");
result = result.replaceAll("零([亿万元])", "$1");
result = result.replaceAll("壹拾", "拾");
result = result.replaceAll("^元", "");
result = result.replaceAll("零角零分", "整");
result = result.replaceAll("零分", "整");
return result;
}

这是在网上找到的一个方法 但在应用中出现了ArrayIndexOutOfBoundsException的情况 求高手指导下是怎么回事

第1个回答  2013-04-18
String mm[]=rmb.split("\\.");这里的小数点应该该是这样的追问

抱歉你的也是对的我没仔细看。。

追答

你的数组之所以越界就是这里的正则写错了,根本就没有根据小数点把字符串分开。所以mm只有一个元素mm[0]没有mm[1]

第2个回答  2013-04-18
数组小标的问题吧,好好检查一下,下标,最好使用debug
一步一步的看,到底是那一步出现问题。
我也有现成的代码,如果实在不行,我可以给你一份。
希望 采纳。本回答被提问者采纳
第3个回答  2013-04-18

把这行改下就行了

String mm[] = rmb.split("\\.");

追问

改成什么?求详细一点。。

追答

就改成我上面的那行代码啊,你开始是String mm[] = rmb.split("//.");的

追问

的确是这样。。要不我新开个题把分挂出去我选你的答案你看好么。。刚点歪了。。。

追答

没关系的,问题解决了就行,不要麻烦了

第4个回答  2013-04-18
字符串拆的不对,应该用rmb.split("[.]")