金钱表示转换(阿拉伯数字to汉字)

懒得写小数后的转换了,以后有时间补上


public class MoneyConvent {

//不用String是因为String内部还是char数组,自己用数组用随机查找快一点
private static final char[] HanChar={'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
private static final char[] sbq={'个','拾','佰','仟'};
private static final char[] wy={'亿','万'};


public static String fromArabToCharacter(String arab){
//预设一个较大的空间存储转换后的汉字序列
char[] temp=new char[arab.length()*3];
int j=0;
//遍历每一位数字
for (int i = 0; i < arab.length(); i++) {
//如果是万位或亿位并且不是零位,有可能要加万或亿字
if((i%4==0) && i!=0){
//i能进来说明i只能是4的倍数,wy[(i+1)/4%2]=='亿' 看该数字位数i是否是8的倍数(输出亿) 否则就是4的倍数(有可能输出万)
if(wy[(i+1)/4%2]=='亿' || !isWanZero(arab, i)){
temp[j++]=wy[(i+1)/4%2];
}
}
//如果该位上是0就什么都不加
if(getHanChar(arab,i)=='零'){
continue;
}
//如果不是4的倍数,就加上相应的 十 百 千
if((i%4)!=0){
temp[j++]=sbq[i%4];
}
//加上该位上数字的汉字
temp[j++]=getHanChar(arab,i);
}
//转换成StringBuffer后反转序列然后去掉空位加上圆,整数部分就完成了
StringBuffer sb=new StringBuffer(String.valueOf(temp));
return sb.reverse().toString().trim()+"圆";
}

//需不需要输出万字, 主要看万位到下一个亿位之前是否全是0
private static boolean isWanZero(String arab,int i){
if(getHanChar(arab,i)!='零'){
return false;
}else if(getHanChar(arab,i+1)!='零'){
return false;
}else if(getHanChar(arab,i+2)!='零'){
return false;
}else if(getHanChar(arab,i+3)!='零'){
return false;
}
return true;
}

private static char getHanChar(String arab,int i){
return HanChar[Integer.parseInt(arab.substring(arab.length()-1-i, arab.length()-i))];
}

public static void main(String[] args) {
System.out.println(fromArabToCharacter("65432109876543210"));
System.out.println(fromArabToCharacter("10200400000000000"));
}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值