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