//10、金额转换,阿拉伯数字转换成中国传统形式。
//例如:101000001010 转换为 壹仟零壹拾亿零壹仟零壹拾圆整
---------------------------------------------------------------------------------------
package com.itheima;
import java.util.ArrayList;
import java.util.Scanner;
public class Test10 {
public static void main(String[] args) {
// 定义一个数组,记录每个数字对应的繁体字
String[] arr = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
// 定义每四个数字对应的等级
String[] arr1 = { "", "萬", "亿" };
// 定义一个变量接收输入的数字(老师,我为了便于计算,定义long类型)
long money = new Scanner(System.in).nextLong();
// 定义ArrayList集合,用来添加每四位对应的繁体读法
ArrayList<String> list = new ArrayList<>();
// 最后是圆整,所以先添加它,这样逆遍历可以拼接成正常读法
list.add("圆整");
// 定义字符串缓冲区为了将每四位的读法正常拼接一起
StringBuilder sb = new StringBuilder();
// 定义yushu为了接受每四位数字
long yuShu = 0;
// ge,shi,bai,qian代表每四位数对应的个位,十位,百位,千位的数字
long ge = 0;
long shi = 0;
long bai = 0;
long qian = 0;
String str = "";
// 计数器,计算循环几次,便于拿到每四位对应的等级
int count = 0;
// 当money大于零的时候进行循环
while (money > 0) {
// 没进来一次,循环加1,便于在后面添加每四位对应的等级
count++;
// 获得每四位数
yuShu = money % 10000;
// 获得下次循环的money,也就是去掉四位数字之后的money
money = money / 10000;
// 当余数为o的时候,也就是说明四位都为零,将其四位记录为零,进行下次循环
if (yuShu == 0) {
list.add("零");
continue;
}
// 获得每四位数对应的个位,十位,百位,千位对应的数字
ge = yuShu / 1 % 10;
shi = yuShu / 10 % 10;
bai = yuShu / 100 % 10;
qian = yuShu / 1000 % 10;
// 如果千位对应的数字为0,只添加零
if (qian == 0) {
str = str + arr[(int) qian];
} else {
// 如果千位对应的数字不为0,添加对应的繁体字和对应的位数等级"仟"
str = arr[(int) qian] + "仟";
}
if (bai == 0) {
// 如果百位对应的数字为0,只添加零
str = str + arr[(int) bai];
} else {
// 如果百位对应的数字不为0,添加对应的繁体字和对应的位数等级"佰"
str = str + arr[(int) bai] + "佰";
}
if (shi == 0) {
// 如果十位对应的数字为0,只添加零
str = str + arr[(int) shi];
} else {
// 如果十位对应的数字不为0,添加对应的繁体字和对应的位数等级"拾"
str = str + arr[(int) shi] + "拾";
}
if (ge == 0) {
// 如果个对应的数字为0,只添加零
str = str + "";
} else {
// 如果个对应的数字不为0,添加对应的繁体字
str = str + arr[(int) ge];
}
// 在上面其中四个零的情况已经排除了,判断是否有三个挨在一起,因为是四位数,其中四个零的情况已经排除了
if (str.indexOf("零零零") != -1) {
str = str.replace("零零零", "");
}
// 将两个挨在一起的零替换成一个
if (str.indexOf("零零") != -1) {
str = str.replace("零零", "零");
}
// 有的可能千位是零,将其去掉
if (str.startsWith("零")) {
str = str.substring(1, str.length());
}
// 有可能有去重多个零之后末尾是零的情况,这时需要判断是否存在这种情况,存在末尾零去除
if (str.endsWith("零")) {
str = str.substring(0, str.length() - 1);
}
// 将每四位对应的等级加上
str = str + arr1[count - 1];
// 将每四位读法添加到集合
list.add(str);
}
// 测试下,集合中每四位读法是否有错
System.out.println(list);
// 逆遍历集合,将其拼接
for (int i = list.size() - 1; i >= 0; i--) {
sb.append(list.get(i));
}
// 将字符串缓冲区转换成String赋值给str
str = sb.toString();
// 当出现10000000000,这样的数字之后,中间都是零,有可能出现"零圆"这样的形式,将其全部替换成"圆"
while (str.indexOf("零圆") != -1) {
str = str.replace("零圆", "圆");
}
// 打印结果
System.out.println(str);
}
}
|
|