这是我的,给大家参考- package com.itheima;
- public class Test10 {
- /**
- * @param 黑马程序员
- *
- * @author 高一航
- */
-
- public static void main(String[] args) {
- String money = "103070805040"; //需要转换的钱(103070805040比101000001010复杂写,便于测试)
- System.out.println(convert(money)); //打印出结果
- }
- public static String convert(String money) {
-
- //下面两个字符数组,将阿拉伯数字和中国数字的大写 一一对应
- char[] enNum = new char[] { '0', '1', '2', '3', '4', '5', '6', '7',
- '8', '9' };
- char[] cnNum = new char[] { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒',
- '捌', '玖' };
- char[] unit = new char[] { '仟', '0', '拾', '佰', '元', '万', '亿' }; //定义一个单位的字符数组,'0'只占个位置,没有特定的意义
- for (int i = 0; i < enNum.length; i++) { //将传入的阿拉伯汉字一一转换成中文大写数字
- money = money.replace(enNum[i], cnNum[i]);
- }
-
- // quotient定义了i除以4的商,remainder定义了余数
- int quotient;
- int remainder;
- StringBuilder sb = new StringBuilder();//用于保存需要返回的结果
- //从后向前遍历字符串中的每个数,放在i位置(个,十,百,千分别在1,2,3,4位置),index则指的是每个数在字符串中的下标
- for (int i = money.length(), index = 0; i > 0; i--, index++) { //每次循环i自减,index自增;
- quotient = i / 4; //判断这个数的数量级(万还是亿)
- remainder = i % 4; //余数用于判断改数对应在unit字符数组中的单位;
- if (money.charAt(index) == '零') { //当读到0的情况比较复杂单独拿出来考虑
- if (remainder == 1) { //读到的数是0,而且该数处在应该添加万,亿单位的位置上
- if (!money.substring(index - 3, index + 1).equals("零零零零")) { //判断之前没有出现过4个连续的0才添加万或者亿的单位
- sb.append(unit[4 + quotient]);
- }
- }
- continue; //添加完单位就应该跳出本次循环
- }
-
- //当读取到的数不是第一个数,且之前的一个数不是0,还要保证不是'万','亿'单位后紧跟着的数,此时才可以添加'零'
- if (i != money.length()&&remainder!=0 && money.charAt(index - 1) == '零') {
- sb.append('零');
- }
- sb.append(money.charAt(index)); //添加该不为零的数到字符串
-
- if (remainder == 1) { //判断余数为1,就是应该添加'万','亿','元' 单位的时候了
- sb.append(unit[4 + quotient]); //添加对应的单位
- }else{
- sb.append(unit[remainder]); //余数不为1则添加该数对应的'仟', '拾', '佰'单位
- }
- }
- sb.append("整"); //最后添加个'整'
- return sb.toString(); //返回给方法调用处;
- }
- }
复制代码 |