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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

刚做出来,感觉自己做的好麻烦,有没有比我简单的方法?下面是我的代码。
package com.itheima;

import java.util.Scanner;

/**
* 金额转换,阿拉伯数字转换成中国传统形式。
*
* 例如:101000001010 转换为 壹仟零壹拾亿零壹仟零壹拾圆整
*
* @author Administrator
*
*/
public class Test10 {
        public static void main(String[] args) {
                while (true) {
                       
                        Scanner sc = new Scanner(System.in);
                        System.out.println("请输入一个数:");
                        long n = sc.nextLong();
                        if (n<10000) {
                                System.out.println(wan( (int)n ) + "圆整");
                        }
                        if (n>=10000 && n<100000000) {
                                System.out.println(yi( (int)n ) );
                        }
                        if (n>=100000000 && n<1000000000000l) {
                                System.out.println(wanYi(n) ) ;
                               
                        }
                }
        }
        /*
         * 万以下的数
         */
        public static String wan(int n){
                String[] str = {"零","壹","贰","叁","肆","伍","陸","柒","仈","玖"};
                //定义个十百位
                String ge = str[n%10];
                String shi = str[n/10%10];
                String bai = str[n/100%10];
                String qian = str[n/1000%10];
               
                if (n>=0 && n<10) {                //大于等于0小于10
                        return str[n];
                }
                if (n>=10 && n<100) {                //大于等于10小于100
                        if (ge=="零") {                        //如果是整十
                                return shi+"拾";
                        }
                        return shi+"拾"+ge;                //如果不是整十
                }
                if (n>=100 && n<1000) {                        //大于等于100小于1000
                        if (shi=="零" && ge=="零") {                        //如果是整百
                                return bai+"佰";
                        }
                        if (shi=="零") {                                //如果只是十位等于0
                                return bai+"佰"+"零"+wan(n%100);
                        }
                        return bai+"佰"+wan(n%100);
                }
                if (n>=1000 && n<10000) {                        //大于等于1000小于10000
                        if (bai=="零" && shi=="零" && ge=="零") {                //如果是整千
                                return qian+"仟";
                        }
                        if (bai=="零") {                                //如果百位为0
                                return qian+"仟"+"零"+wan(n%1000);
                        }
                        return qian+"仟"+wan(n%1000);
                       
                }
                return null;
        }
        /*
         * 亿以下的数
         */
        public static String yi(int n){
               
                if (n%10000==0) {                        //整万
                        return wan( (int)n/10000 ) + "万圆整";
                }
                if (n%10000/1000==0) {                //万位以后的数小于1000
                        return wan( (int)n/10000 ) + "万" + "零" + wan( (int)n%10000 ) + "圆整";
                }
                return wan( (int)n/10000 ) + "万" + wan( (int)n%10000 ) + "圆整";
               
        }
        /*
         * 万亿以下的数
         */
        public static String wanYi(long n){
                if (n%100000000==0) {                        //如果是整亿
                        return wan( (int)(n/100000000) ) + "亿圆整";
                }
                if (n%100000000/10000000==0 && n%100000000/10000!=0) {                //亿位后的数小于一千万 并且不小于一万
                        return wan( (int)(n/100000000) ) + "亿" + "零" + yi( (int)n%100000000 ) ;
                }
                if (n%100000000/10000000==0 && n%100000000/10000==0) {                //亿位后的数小于一千万 并且小于一万
                        return wan( (int)(n/100000000) ) + "亿" + "零" + wan( (int)(n%100000000) ) +"圆整";
                }
                return wan( (int)(n/100000000) ) + "亿" + yi( (int)(n%100000000) );
               
        }
}

4 个回复

正序浏览
package jdbcutil;
import java.util.ArrayList;


/**
* 第10题: 金额转换,阿拉伯数字转换成中国传统形式。
* 例如:101000001010   转换为   壹仟零壹拾亿零壹仟零壹拾圆整
*
*
*
*/

/**
* 题目分析:本题实现比较复杂,主要是对连续零的判断,通过循环判断每一位以及
* 前一位是否为零,来控制是否删除多余的零,实现字符串的金额转换
*
*
*/
public class Test10 {

        
        /**
         * 主函数
         * @param args
         */
        public static void main(String[] args) {
               
                //定义一个阿拉伯数字的字符串数组
                String[] arr = {"101789010","0010198654345010","100","sdffd100"};
                //遍历数组
                for(int i=0;i<arr.length;i++)
                {
                        String str = transform(arr[i]);                //调用函数,将阿拉伯数字金额 转换为中国传统形式金额
                        System.out.println(arr[i]+" 转化后为: "+str);        //打印转换后的字符串内容
                }
        }
        
        /**
         *  将字符串金额str转换为中国传统金额表示方式
         * @param str
         * @return
         */
        public static String transform(String str){
                //使用正则表达式判断字符串格式是否为数字格式
                if(!str.matches("\\d+")){
                        System.out.println("字符串" + str + "不是数字格式,无法转换!");
                        return null;
                }
                //将字符串最前面的0去掉
                while(str.startsWith("0")){
                        str = str.substring(1, str.length());
                }
                //将字符串数字替换成中文数字
                String[] num = new String[]{"0","1","2","3","4","5","6","7","8","9"};
                String[] cnNum = new String[]{"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
                for(int i=0; i<10; i++){
                        str = str.replace(num[i], cnNum[i]);
                }
               
                StringBuilder sb = new StringBuilder(str);//StringBuilder容器中存放字符串,用于插入删除操作
                int index = str.length()-1;   //从第index个字符从后往前开始操作,操作一次,index--
                //存放金额单位
                String[] unit = {"","拾","佰","仟"};
                String[] unit4 = {"萬","亿"};
               
                boolean flag = false;//判断前一个数是否为零的标记
               
                for(int i=0; i<str.length(); i++){//循环体内对容器sb进行操作
                        
                        //每4位插入万每8位插入亿,最低位先不设置单位
                        if(i%4 == 0 && i != 0){
                                //根据金额规则,单位万前面为4个零时,不插入万,并将index位置(最低位)的零删除
                                if((i/4-1)%2 == 0 && index >= 3 && str.substring(index-3, index+1).equals("零零零零")){
                                        sb.deleteCharAt(index);
                                        index--;
                                        continue;
                                }
                                //否则在index+1位置插入相应的单位:万、亿
                                sb.insert(index+1, unit4[(i/4-1)%2]);
                        }
                        //如果4位的最低位为零,删除最低位的零,将零标志置为true
                        if(i%4 == 0 && str.charAt(index) == '零'){
                                sb.deleteCharAt(index);
                                flag = true;
                                index--;
                                continue;
                        }
                        //如果前一位为零并且这一位也为零,删除这一位的零
                        if(flag && str.charAt(index) == '零'){
                                sb.deleteCharAt(index);
                                index--;
                                continue;
                        }
                        //如果当前位为零,将零标志置为true
                        if(str.charAt(index) == '零'){
                                flag = true;
                                index--;
                                continue;
                        }
                        //当前位不为零,将零标志位置为false,插入金额单位
                        flag = false;
                        sb.insert(index+1, unit[i%4]);
                        index--;
                }
                //完善金额表示形式
                sb.append("圆整");
                return sb.toString();
        }
        

}
回复 使用道具 举报
package com.heima;
public class Exercise {

        /**101000001010   转换为   壹仟零壹拾亿零壹仟零壹拾圆整
         * @param args
         */
        public static void main(String[] args) {
               
                show(98020237);
               
        }
       
        public static void show(int i){
                char[] ch ={'圆','拾','佰','仟','萬','拾','佰','仟','亿','拾','佰','仟'};
                char[] ch1 ={'零','壹','贰','叄','肆','伍','陆','柒','捌','玖'};
                int[] a = new int[12];
                int k =0;
                for (int j = i; j>0; j/=10,k++) {
                        a[k]=j%10;
                }
                for (int j = k-1; j >=0; j--) {
                        if (j>0&&a[j]==0){
                        System.out.print(ch1[0]);               
                        }else if (j>0&&a[j]!=0){
                        System.out.print(ch1[a[j]]+""+ch[j]);
                        }
                        if (i==0){
                                if(a[0]!=0){
                                        System.out.print(ch1[a[0]]+""+ch[0]);
                                       
                                }else if (a[0]==0){
                                        System.out.print(ch[0]);       
                                }       
                               
                        }
                       
                }
        }

}
回复 使用道具 举报
zhoubinjian 发表于 2016-6-6 22:13
看我的这个 。用正则做的,

真吊,竟然可以这么简单,,我得学习下正则表达式了。。
回复 使用道具 举报
看我的这个 。用正则做的,
  1. package com.itheima;

  2. /**
  3. * 需求:10: 金额转换,阿拉伯数字转换成中国传统形式。
  4. *例如:101000001010   转换为   壹仟零壹拾亿零壹仟零壹拾圆整
  5. *                                                    壹仟零壹拾亿零壹仟零壹拾圆整
  6. *思路:        1.定义两个数组分别存放单位和写法;
  7.                 2.定义一个字符串缓冲区对给定的字符进行存储
  8. *                3. 通过正则表达式去零操作
  9. *步骤:
  10. *1.创建一个转换的方法converNumber(long number)
  11. *2.将阿拉伯形式转换成中国传统形式,通过字符串缓冲区存储
  12. *3.正则表达式去零操作

  13. */
  14. class Test9 {
  15.         public static void main(String[] args){
  16.                 System.out.println(converNumber(101000001010L));
  17.         }
  18.         public static String converNumber(long number){
  19.                 String[] str1={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖","拾"};
  20.                 String[] str2={"圆","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟"};
  21.         StringBuilder sb=new StringBuilder();
  22.         int count=0;
  23.         while(number>0){
  24.                 long lastNumber=number%10;
  25.                 sb.insert(0, str2[count++]);
  26.                 sb.insert(0,str1[(int) lastNumber]);
  27.                 number=number/10;
  28.         }
  29.         return sb.toString().replaceAll("零[拾佰仟]", "零").replaceAll("零{4}万", "零").replaceAll("零+万", "万")
  30.                         .replaceAll("零+", "零").replaceAll("零+亿", "亿").replaceAll("零+圆", "圆")+"整";
  31.         }
  32. }
复制代码

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马