黑马程序员技术交流社区

标题: 求阿拉伯数字转换成中国传统形式,有更简单的方法吗,请各位大神指点 [打印本页]

作者: 星陨    时间: 2016-12-14 11:13
标题: 求阿拉伯数字转换成中国传统形式,有更简单的方法吗,请各位大神指点
public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入一个整数:");
                // 键盘录入一个整数
                String num = sc.next();
                long price = Long.parseLong(num);
                String[] str1 = "零 壹 贰 叁 肆 伍 陆 柒 捌 玖".split(" ");
                String[] str2 = "圆整 拾 佰 仟 萬 拾萬 佰萬 仟萬 亿 拾亿 佰亿 仟亿".split(" ");
                String str3 = "";
                int pre = 0;
                for (int i = 1; i <= num.length(); i++) {
                        long j = price % 10;
                        price = price / 10;

                        if (j != 0) {
                                if (pre != 0 && i - pre >= 2) {// 带零
                                        str3 = str1[(int) j] + str2[i - 1] + str1[0] + str3;
                                } else {// 不带零
                                        str3 = str1[(int) j] + str2[i - 1] + str3;
                                }
                                pre = i;
                        }
                }

                System.out.println(str3);
        }
作者: Lee_Hoon_Leong    时间: 2016-12-14 16:37
str1和str2建议换成字符数组,而且352万转换成中文形式不是三百万五十万二万。
作者: Lee_Hoon_Leong    时间: 2016-12-14 16:39
缓冲字符可以避免内存的浪费
作者: Lee_Hoon_Leong    时间: 2016-12-14 16:43
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("零圆", "圆")+"整";
               
        }
       
}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2