java实现银行存款问题,字符串型的数字转为银行所用单位('零','壹','贰','叁','肆','伍','陆','柒','捌','玖')

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库的基本操作,没什么技术含量,如果有对你有帮助还请点个赞......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值