/*第10题:金额转换,阿拉伯数字转换成中国传统形式。
例如:101000001010 转换为 壹仟零壹拾亿零壹仟零壹拾圆整*/
//思路:此题考察的是查表法找出对应的值,
//需要制作数值表,单位表,但是当遇到0的时候就不需要附带单位。
class Test10{
public static String main(String[] args)
{
String mainMethod(String s);//在这里报错。一直弄不懂错在哪里
{
//定义单位数组和为0是的情况
String[]units={"亿","万","圆整"};
String result="";
//在字符串前面补零,使字符串长度为4的倍数
int length=s.length()%4;
if(length==1){
s="000"+s;
}else if(length==2){
s="00"+s;
}else if(length==3){
s="0"+s;
}
//转成数组
char[]ch=s.toCharArray();
//获得数组长度除以4的结果,从而决定有几个子数组和几次循环
int mod=ch.length/4;
for(int i=0, i_units=3-mod;i<mod;i++,i_units++){
char[]ch2=Arrays.copyOfRange(ch, i*4, (i*4)+4);//从左往右每次取4位组成新数组
//如果一个子数组返回结果为零,那么后面不加单位
if(read(ch2).equals("零")){//此处不能用“==”
result=result+read(ch2);
}else if(i==0&&read(ch2).startsWith("零")){//最前面的结果不能有零
result=result+read(ch2).substring(1)+units[i_units];
}else{//正常的结果
result=result+read(ch2)+units[i_units];
}
}
return result;
}}
private static String read(char[]ch){
String[]num={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖","拾"};
String [] units={"仟","佰","拾",""};
String ss="";
//遍历
for(int i=0;i<4;i++){
String s=ch[i]+"";
//将数组内字节转换成数字
int i_num=Integer.parseInt(s);
//结合条件使用查表法获取结果
if((i_num==0&&i==3)||(i_num==0&&i==0)){
ss=ss;
}else if(i_num==0||i==3){
ss=ss+num[i_num];
}else {
ss=ss+num[i_num]+units[i];
}
}
//使用正则,对多余的零去掉
ss=ss.replaceAll("(.)\\1+","$$$$$$$$1");
return ss;
}
}
|
|