package com.itheima;
import java.util.Scanner;
public class Test_10 {
/**
*10、金额转换,阿拉伯数字转换成中国传统形式。例如:101000001010 转换为 壹仟零壹拾亿零壹仟零壹拾圆整
* 思路: 1.对阿拉伯中的数字进行简单的替换,1替换成壹,0替换成零。需要在每一个数字后面加上各自位数,零佰壹拾
* 2.对全部替换后的字符串进行正则的修改,使之变成符合我们读写习惯的形式
*/
public static void main(String[] args) {
System.out.println("输入转换的金额(最大12位):");
//从控制台读取Long类型数据,int型装不下
Scanner sc=new Scanner(System.in);
long money=sc.nextLong();
//调用getMoney方法返回中国传统形式的数字
System.out.println(getMoney(money));
}
private static String getMoney(long money) {
// 用字符数组对数字进行简单的替换,其中count根据money最后一位的得到,unit每次+1
char[] unit={'圆','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟'};
char[] count={'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
//用缓冲字符串存放
StringBuilder sb=new StringBuilder();
//每进行一次循环,money都会除10,直到为0
for (int i = 0; money!=0; i++) {
//先在字符串的最前端插入位数
sb.insert(0, unit[i]);
//然后再在前端插入数字的个数
sb.insert(0, count[(int) (money%10)]);
money/=10;
}
//此时得到格式:壹仟零佰壹拾零亿零仟零佰零拾零万壹仟零佰壹拾零圆,需要转换成 壹仟零壹拾亿零壹仟零壹拾圆整
//需要把其中的零拾、零佰、零仟替换为零,亿前面的多个零去除变成亿,万同样,多个零替换为一个零,保证至少有一个零可读
//零园也要替换为圆。可能会出现”亿万“的情况 ,需要替换成”亿零“,最后在末尾添加上"整"结束替换
return sb.toString().replaceAll("零[拾佰仟]", "零").replaceAll("零+亿", "亿")
.replaceAll("零+万", "万").replaceAll("亿万", "亿零").replaceAll("零+", "零")
.replaceAll("零圆", "圆")+"整";
}
}
|