阿拉伯数字到中文字符的转换


package com.zhouquan;
public class Demo1234 {


public static String convert(int money){
//:“壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、萬
char[] ch1 = new char[]{'零','壹','贰','叁','肆','伍','陆','柒','捌'};
char[] ch2 = new char[]{'元','拾','佰','仟','萬','拾','佰','仟','亿','拾','佰','仟'};

int index = 0;
int weight = 0;

int count = money;
StringBuffer sb = new StringBuffer();
sb.append(ch2[0]);
while(count!=0){
index = count % 10;
//第一次不需添加单位
if(index != 0 && weight !=0){
sb.append(ch2[weight]);  //添加单位
}
sb.append(ch1[index]);  //完成数字到字符的转换
count = count / 10;
weight++;
}



return sb.reverse().toString();

}


/**
* 功能描述:
*
* 创建人:ZHOUQUAN 
* <p>创建日期 :2014-8-9 下午7:06:52</p>
*
* @param money
* @return
*
* <p>修改历史 :(修改人,修改时间,修改原因/内容)</p>
*/
public static String convert2(int money){
//:“壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、萬
char[] ch1 = new char[]{'零','壹','贰','叁','肆','伍','陆','柒','捌'};
char[] ch2 = new char[]{'元','拾','佰','仟','萬','拾','佰','仟','亿','拾','佰','仟'};

int index = 0;
int weight = 0;

int count = money;
StringBuffer sb = new StringBuffer();
while(count!=0){
index = count % 10;
sb.append(ch2[weight]);  //添加单位
sb.append(ch1[index]);  //完成数字到字符的转换
count = count / 10;
weight++;
}

//对字符串进行处理,使之符合人的习惯
StringBuffer result = new StringBuffer();
result = sb.reverse();
int i = 0;
while(i < result.length()){
int j = i + result.substring(i).indexOf('零');
if(j<i)
break;
else{
char nextch = result.charAt(j+1);
switch(nextch)
{
case '拾':
case '佰':
case '仟':
if(result.charAt(j+2)!='零'){
result.deleteCharAt(j+1);//删除单位
i=j+1; //指针向前移一位
}else{
result.delete(j, j+2); //删除零和单位
i=j; //指针不变
}
break;
case '萬':
if(result.charAt(j-1)!='亿'){
result.deleteCharAt(j);  //删除零
i=j+1;
}else{
result.delete(j, j+2);//删除零和单位
i=j;
}
break;
case '元':
result.deleteCharAt(j); 
break;
}

}
return result.toString();
}

public static String convert3(double money){
//:“壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、萬
char[] ch1 = new char[]{'零','壹','贰','叁','肆','伍','陆','柒','捌'};
char[] ch2 = new char[]{'分','角','元','拾','佰','仟','萬','拾','佰','仟','亿','拾','佰','仟'};
int index = 0;
int weight = 0;
int count = (int) (money*100);
StringBuffer sb = new StringBuffer();
while(count!=0){
index = count % 10;
sb.append(ch2[weight]);  //添加单位
sb.append(ch1[index]);  //完成数字到字符的转换
count = count / 10;
weight++;
}

//对字符串进行处理,使之符合人的习惯
StringBuffer result = new StringBuffer();
result = sb.reverse();
int i = 0;
while(i < result.length()){
int j = i + result.substring(i).indexOf('零');
if(j<i)
break;  //说明不存在零这个特殊情况
else{
char nextch = result.charAt(j+1);
switch(nextch)
{
case '拾':
case '佰':
case '仟':
if(result.charAt(j+2)!='零'){
result.deleteCharAt(j+1);//删除单位
i=j+1;
}else{
result.delete(j, j+2); //删除零和单位
i=j;
}
break;
case '萬':
if(result.charAt(j-1)!='亿'){
result.deleteCharAt(j);  //删除零
i=j+1;
}else{
result.delete(j, j+2);//删除零和单位
i=j;
}
break;
case '元':
result.deleteCharAt(j); 
break;
case '角':
result.deleteCharAt(j+1);//删除单位
i=j+1;
break;
case '分':
if(result.charAt(j-1)!='角')
result.append('整');
i=result.length();
break;

}

}
return result.toString();
}

public static void main(String[] args) {
String str1 = new String();
String str2 = new String();
String str3 = new String();
int[] test = new int[]{200000401,204060801,201254012,201204012,234233343,1200000000};
double[] test2 = new double[]{2000401.0012,2040801.1023,2012012.01254,2014012.1244};
for(int i = 0;i<test2.length;i++){
// str1 = Demo1234.convert(test[i]);
// str2 = Demo1234.convert2(test[i]);
System.out.println("第" + i + "个数" + test[i] + str1);
// System.out.println("第" + i + "个数" + test[i] +str2);

str3 = Demo1234.convert3(test2[i]);
System.out.println("第" + i + "个数" + test2[i] +str3);
}

}

}




/*if(nextch == '拾' || nextch == '佰' || nextch == '仟'){
if(result.charAt(j+2)!='零'){
result.deleteCharAt(j+1);//删除单位
i=j+1;
}else{
result.delete(j, j+2); //删除零和单位
i=j;
}
}else{
if(nextch == '萬'){
if(result.charAt(j-1)!='亿'){
result.deleteCharAt(j);  //删除零
i=j+1;
}else{
result.delete(j, j+2);//删除零和单位
i=j;
}

}else{
result.deleteCharAt(j); //?????
break;
}


}*/

问题终于解决了,我很高兴。回想解决问题的历程,可谓如鱼饮水,冷暖自知。记得有句话说的好,百分之十的情况占百分之八十的代码,记得第一次做时没考虑零的情况,在一个小时内结束战斗,但是为了解决零,调试零的问题却花了我两天的时间。而且,我还敢肯定的说,代码中还有问题,先不管了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值