李大伟 发表于 2013-4-8 14:16
需要啊 ,看看,谢谢了
public class Test10 {
public static void main(String[] args) {
/*由于直接用整数表示要转换的大数不好表示,所以,将式子表示成字符串型*/
String moneyString = "101000000010";
System.out.println(transform(moneyString));
}
/**
*
* @param moneyString 传入的待转换字符串
* @return 转换好的字符串
*/
public static String transform(String moneyString) {
/* 定义中文大写的数组 */
String[] chineseUpcase = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌",
"玖" };
/* 定义换算单位 */
String[] unit = { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿" };
StringBuilder builder = new StringBuilder();
/**
* 依次替换数字为大写,并给每位赋一个单位
*/
for (int i = 0; i < moneyString.length(); i++) {
/*
* 按照出现的数字,依次替换成大写汉字,在ASCII码中,数字0对应的字符编码是48,
* 所以,得到了字符,就应该减去48以换算成相应的数字值
*/
builder.append(chineseUpcase[moneyString.charAt(i) - 48]);
}
int pointer = 1;
for (int j = moneyString.length() - 1; j > 0; j--) {
/* 从最低位开始依次在每位后面加上各自代表的位数,拾位,佰位,仟位等 */
builder.insert(j, unit[pointer++]);
/* 在亿位之后又重新开始循环 */
if (pointer == 9)
pointer = 1;
}
/**
* 对出现的零和单位的特殊情况做处理
*
*replace(int start,int end,String str)
start - The beginning index, inclusive.
end - The ending index, exclusive.
str - String that will replace previous contents.
*/
/* 当十位为零时,用"零"代替"零拾" */
while (builder.indexOf("零拾") != -1) {
builder.replace(builder.indexOf("零拾"), builder.indexOf("零拾") + 2, "零");
}
/* 当百位为零时 */
while (builder.indexOf("零佰") != -1) {
builder.replace(builder.indexOf("零佰"), builder.indexOf("零佰") + 2, "零");
}
/* 仟位为零 */
while (builder.indexOf("零仟") != -1) {
builder.replace(builder.indexOf("零仟"), builder.indexOf("零仟") + 2, "零");
}
/* 万位为零,需要保留“万”*/
while (builder.indexOf("零万") != -1) {
builder.replace(builder.indexOf("零万"), builder.indexOf("零万") + 2, "万");
}
/* 亿位为零 */
while (builder.indexOf("零亿") != -1) { // 同上
builder.replace(builder.indexOf("零亿"), builder.indexOf("零亿") + 2, "亿");
}
/********* 特殊情况,当有亿和万碰到一起的时候,如:100002345 **********/
while (builder.indexOf("亿万") != -1) {
builder.replace(builder.indexOf("亿万"), builder.indexOf("亿万") + 2, "亿零");
}
/* 有连续的零时,保留一个零 */
while (builder.indexOf("零零") != -1) {
builder.replace(builder.indexOf("零零"), builder.indexOf("零零") + 2, "零");
}
/* 当结尾为零时,不显示,经过上面对“零零”的处理,只可能出现一个零 */
while (builder.lastIndexOf("零") == builder.length() - 1) {
/*这里的参数,end,最好不要写成builder.length,防止方法移动后,后面添加的东西也被删除了*/
builder.delete(builder.lastIndexOf("零"), builder.lastIndexOf("零") + 1);
}
builder.append("圆整");
return builder.toString();
}
} |