package test;
/**
* 写一个方法,输入String str,如: "¥1032.56"
* 请转换为 如下样式:壹千零叁拾贰元五角六分零厘 版本2.0
*/
public class Money {
/**目前只认万万亿以内的数字,超过这个数字将无法读出来*/
public static String str="¥12_1891_3225_1675.56";
public static char[] hz={'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
public static char[] jfl={'角','分','厘'};
public static char[] unit={'元','拾','佰','仟','万','亿'};
public static void main(String[] args) {
String str2=str.replace("_", "");
String prefix=str2.split("\\.")[0].substring(1,str2.split("\\.")[0].length());
String suffix=str2.split("\\.")[1];
System.out.println("prefex:"+prefix +" \nsuffix:"+suffix);
String utimateRes=(dealInteger(prefix)+dealDecimal(suffix)).replaceAll("零+", "零");
/*修改的地方,修复了整数区域读0的bug*/
for(int i=0;i<unit.length;i++){
utimateRes=utimateRes.replaceAll("零"+unit[i], String.valueOf(unit[i]));
}
/*修改的地方 ,修复了读0角0分0厘的bug*/
for(int i=0;i<jfl.length;i++){
utimateRes=utimateRes.replaceAll("零"+jfl[i], "零").replaceAll("零+", "零").replaceAll("零$","");
}
System.out.println("最终结果 "+str+":"+utimateRes);
//¥12_1891_3225_1675.56:壹拾贰万壹千捌百玖拾壹亿叁千贰百贰拾伍万壹千陆百柒拾伍元伍角陆分
}
/**
* 处理整数
* @return
*/
public static String dealInteger(String prefix){
String resQian="";
String resWan="";
String resYi="";
String resQwy="";
/*修改的地方 添加了千万亿级别*/
if(prefix.length()>=12){
String qwy=prefix.substring(0,prefix.length()-12);
System.out.println("qwy:"+qwy);
resQwy=dealfor(qwy,"万");
}
/*亿级别*/
if(prefix.length()>=8){
String yi= prefix.length()<=12?prefix.substring(0,prefix.length()-8):prefix.substring(prefix.length()-12,prefix.length()-8);
System.out.println("yi:"+yi);
resYi="0000".equals(yi)?"亿":dealfor(yi,"亿");
}
/*万级别*/
if(prefix.length()>=5){
String wan= prefix.length()<=8?prefix.substring(0,prefix.length()-4):prefix.substring(prefix.length()-8,prefix.length()-4);
System.out.println("wan:"+wan);
/*修改的地方 处理当前为4个0的情况*/
resWan="0000".equals(wan)?"":dealfor(wan,"万");
}
/*千级别*/
if(prefix.length()>=0){
String qian=prefix.length()<=4? prefix.substring(0,prefix.length()):prefix.substring(prefix.length()-4,prefix.length());
System.out.println("qian:"+qian);
/*修改的地方 处理当前为4个0的情况*/
resQian="0000".equals(qian)||"0".equals(qian)?"":dealfor(qian,"元");
}
return resQwy+resYi+resWan+resQian;
}
/**
* 用于处理小数
* @param suffix
* @return
*/
public static String dealDecimal(String suffix){
String res="";
for(int i=0;i<suffix.length();i++){
res+=String.valueOf(hz[Integer.valueOf(String.valueOf(suffix.charAt(i)))])+String.valueOf(jfl[i]);
}
return res;
}
/**
* 用于处理重复部分
*/
public static String dealfor(String str,String flag){
String resStr="";
for(int i=0;i<str.length();i++){
String zero=str.charAt(i)!='0'?String.valueOf(unit[str.length()-i-1]):"";
if(i==str.length()-1){
if(str.charAt(i)=='0')
resStr+=flag;
else
resStr+=String.valueOf(hz[Integer.valueOf(String.valueOf(str.charAt(i)))])+flag;
}else{
resStr+=String.valueOf(hz[Integer.valueOf(String.valueOf(str.charAt(i)))])+zero;
}
}
return resStr;
}
}
可能上面的程序运行某些条件时存在bug,大家找出来后,可以在下方留言哟、
去银行面试可能会遇到这种问题,但是一般就是问你思路吧,如果是直接敲得话怕是一两个小时解决不了额、毕竟还有好多比较注意细节的地方,一个bug可能就会卡半天,我也是初学java,今天老师给我们出的这个题,作为加分的拔高题,我用了大概三个小时写出来的,实现的方法可能有点绕,有更好的方法的大虾可以在评论区言,这里面库函数使用的比较多,所以依赖也比较大,存粹是一些java库的基本操作,没什么技术含量,如果有对你有帮助还请点个赞......