A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

//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);
        }

}


2 个回复

正序浏览
学习学习
回复 使用道具 举报
不错不错。6
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马