黑马程序员技术交流社区

标题: 例如:101001001010转换为壹仟零壹拾亿壹佰萬壹仟壹拾整 [打印本页]

作者: barny    时间: 2016-10-13 11:32
标题: 例如:101001001010转换为壹仟零壹拾亿壹佰萬壹仟壹拾整
package com.itheima;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/*
* 9、金额转换,阿拉伯数字转换成中国传统形式。

例如:101001001010   转换为   壹仟零壹拾亿壹佰萬壹仟壹拾整
*/
public class Test9 {
        public static void main(String[] args) {
                Scanner sc=new Scanner(System.in);                            //创建键盘录入对象
                System.out.println("请输入一个数字:");                                                       
        long num=sc.nextLong();
        String[] arr1={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
        String[] arr4={"拾","佰","仟","萬","亿"};
        String str1=num+"";                                           //将输入结果转换成字符串形式
        char[] c1=str1.toCharArray();                                 //将录入数据转成字符数组
        int[] arr3=new int[c1.length];                                //定义数组,长度是录入数据的长度
        for (int i = 0; i < arr3.length; i++) {                       //将字符数组的数据添加到int数组中
                arr3[i]=Integer.parseInt(c1[i]+"");
                }
        int[] arr2={0,1,2,3,4,5,6,7,8,9};                             //定义一个零到九的数组
       Map<Integer, String> map=new HashMap<>();                      //定义一个map集合
       for (int i = 0; i < arr2.length; i++) {                        //将arr2的值作为键,将arr1的值作为值
                map.put(arr2[i], arr1[i]);                                    //就是1对应壹,2对应贰
        }
       String str="";                                                 //定义字符串的初始值,就是最终输出结果的初始值
     for (int i = 0; i < arr3.length; i++) {                          //遍历录入的数据
             if (arr3.length-8>0) {                                       //如果长度大于8,说明过亿了
                        if (i<arr3.length-8) {                                    //获取过亿的索引
                                if (i==arr3.length-12) {                              //判断千亿
                                        if (arr3[i]!=0) {                                 //如果不为零
                                                str+=map.get(arr3[i])+arr4[2];                //获取当前数字对应的大写值,再加上仟
                                        }else {
                                                str+=map.get(arr3[i]);                        //等于零就只写零就好.
                                        }
                                }else if(i==arr3.length-11){                          //百亿
                                        if (arr3[i]!=0) {                                 //解释同上
                                                str+=map.get(arr3[i])+arr4[1];
                                        }else {
                                                str+=map.get(arr3[i]);
                                        }
                                }else if(i==arr3.length-10){                          //十亿
                                        if (arr3[i]!=0) {                                 //该位不为零
                                                if (arr3[i]==1&&i==0) {                       //注意,单独判断为1的情况,去掉壹,避免出现壹拾亿的情况
                                                        str+=arr4[0];   
                                                }else {                                    
                                                        str+=map.get(arr3[i])+arr4[0];
                                                }
                                        }else {
                                                str+=map.get(arr3[i]);                        //若该位等于零,不需要加上仟佰的后缀
                                        }
                                }else if(i==arr3.length-9){                           //超过亿的个位数的处理.
                                        if (arr3[i]!=0) {
                                                str+=map.get(arr3[i])+arr4[4];                //这里要在末尾加上亿
                                        }else {
                                                str+=arr4[4];                                 //该位等于零也要加上亿
                                        }
                        }
                }
                        }
             
             if (i>=arr3.length-8&&i<=arr3.length-4) {                    //判断万字头的情况

                     if (i==arr3.length-8&&arr3[i]!=0) {                      //与判断亿同理
                             str+=map.get(arr3[i])+arr4[2];
                        }else if (i==arr3.length-7&&arr3[i]!=0) {
                                str+=map.get(arr3[i])+arr4[1];
                        }else if (i==arr3.length-6&&arr3[i]!=0) {
                                if (arr3[i]==1&&i==0) {                               //避免出现壹拾万也是索引为零时去掉壹
                                        str+=arr4[0];
                                }else {
                                        str+=map.get(arr3[i])+arr4[0];
                                }
                        }else if (i==arr3.length-5){
                                if (arr3[i]!=0) {
                                        str+=map.get(arr3[i])+arr4[3];
                                }else {
                                        str+=arr4[3];
                                }
                        }
                     }
             
                     if (i>=arr3.length-4&&i<arr3.length) {                    //最后判断不足一萬的部分
                         if (i==arr3.length-4&&arr3[i]!=0) {                   //也是和亿同理,只是在末尾不用加东西
                                 if (arr3[i]!=0) {
                                             str+=map.get(arr3[i])+arr4[2];
                                        }else {
                                                str+=map.get(arr3[i]);
                                        }
                            }else if (i==arr3.length-3&&arr3[i]!=0) {
                                    if (arr3[i]!=0) {
                                            str+=map.get(arr3[i])+arr4[1];
                                        }else {
                                                str+=map.get(arr3[i]);
                                        }
                            }else if (i==arr3.length-2) {
                                    if (arr3[i]!=0) {
                                            if (arr3[i]==1&&i==0) {
                                                    str+=arr4[0];
                                                }else {
                                                        str+=map.get(arr3[i])+arr4[0];
                                                }
                                        }else {
                                                str+=map.get(arr3[i]);
                                        }
                            }else if (i==arr3.length-1){
                                    if (arr3[i]!=0)       
                                    str+=map.get(arr3[i]);
                            }
                }
        }
     if (str.endsWith("零")) {                                      //判断末尾是否有单独的零
                str=str.substring(0,str.length()-1);                       //如果末尾单独出现零,则去掉零.   
        }
     str+="整";
     System.out.println("您录入的数字为:"+num);                     
     System.out.println("转换成中文传统大写是:"+str);                        
        }
        }


我的做法有点复杂,有没有简单一点的
作者: x379769646    时间: 2016-10-13 17:34
最后的替换如果看不懂可以一步一步的来做
[Java] 纯文本查看 复制代码
package com.itheima;
public class Test9 {

         public static void main(String[] args){
         //测试
         System.out.println(translate(3500908));
         System.out.println(translate(101000001010L));
}
public static String translate(long n){
         //定义字符数组存储大写数字写法格式
         final char[] number = new char[]
         { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' };
         //定义字符数组存储单位
         final char[] units = new char[]
         { '圆', '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿', '拾', '佰', '仟'};
         //定义一个字符串缓冲区对字符进行存储
         StringBuffer sb = new StringBuffer();
         int index=0;
         long lastNumber = 0;
         while(n!=0){
                 lastNumber = n%10;
                 sb.insert(0,units[index++]);
                 sb.insert(0,number[(int) lastNumber]);
                 n=n/10;
         }
         System.out.println(sb);
         //去零操作,通过正则表达式
         return sb.toString().replaceAll("零[拾佰仟]","零").replaceAll("零+亿","亿").replaceAll("零{4}万","零").
                         replaceAll("零+万","万").replaceAll("零+圆","圆").replaceAll("零+","零")+"整";
}


   
}





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