将一个键盘输入的数字转化成中文输出

本文介绍了一个Java程序,该程序能够将用户输入的数字转换为对应的中文读法,例如输入1234567,输出“一百二十三万四千五百六十七”。程序通过替换数字字符为中文字符,并根据数字位置添加单位如‘万’和‘亿’来实现这一功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package CompileProject;
/*28.将一个键盘输入的数字转化成中文输出 (例如:输入:1234567  输出:一百二拾三万四千五百六拾七)。
*/import java.util.Scanner;

public class P28 {
      private String strNum;
        private String strNumChFormat;
        private String strNumTemp;
        private int intNumLen;
        private String strBegin;
        public P28(String strNum) {
            this.strNum = strNum;
        }
        /**
         *
         * 方法描述:判断输入数据的格式
         * @param strNum
         * @return
         */
        public boolean check(String strNum) {
            boolean valid = false;
            //去掉数字前面的0
            if (strNum.substring(0,1).equals("0")){
                this.strNum = strNum.substring(1);
            }
            try {
                new Double(strNum);
                valid = true;
            }
            catch (NumberFormatException ex) {
                //输入非数字报异常
                System.out.println("Bad number format!");
            }
            return valid;
        }
        public void init() {
            strNumChFormat = "";
            intNumLen = strNum.length();
            strNumTemp = strNum;
            strNumTemp = strNumTemp.replace('1', '一');
            strNumTemp = strNumTemp.replace('2', '二');
            strNumTemp = strNumTemp.replace('3', '三');
            strNumTemp = strNumTemp.replace('4', '四');
            strNumTemp = strNumTemp.replace('5', '五');
            strNumTemp = strNumTemp.replace('6', '六');
            strNumTemp = strNumTemp.replace('7', '七');
            strNumTemp = strNumTemp.replace('8', '八');
            strNumTemp = strNumTemp.replace('9', '九');
            strNumTemp = strNumTemp.replace('0', '零');
            strNumTemp = strNumTemp.replace('.', '点');
            strBegin = strNumTemp.substring(0, 1);
        }
        public String readNum() {
            if (check(strNum)) {
                init();
                try {
                    for (int i = 1, j = 1, k = 1; i < intNumLen; i++) {
                        if (strNumTemp.charAt(intNumLen - 1) == '零' && i == 1) {
                            strNumChFormat = "位";
                        }
                        else if (strNumTemp.charAt(intNumLen - i) == '零' && j == 1) {
                            strNumChFormat = "位" + strNumChFormat;
                        }
                        else if (strNumTemp.charAt(intNumLen - i) == '点') {
                            j = 1;
                            k = 1;
                            strNumChFormat = strNumTemp.charAt(intNumLen - i) + strNumChFormat;
                            continue;
                       }
                       else {
                           strNumChFormat = strNumTemp.charAt(intNumLen - i) + strNumChFormat;
                        }
              if (strNumTemp.charAt(intNumLen - i - 1) != '位' &&
                  strNumTemp.charAt(intNumLen - i - 1) != '零') {
                if (j == 1 && i < intNumLen) {
                  strNumChFormat = '拾' + strNumChFormat;
                }
                else if (j == 2 && i < intNumLen) {
                  strNumChFormat = '百' + strNumChFormat;
                }
                else if (j == 3 && i < intNumLen) {
                  strNumChFormat = '千' + strNumChFormat;
                }
              }
              if (j == 4 && i < intNumLen) {
                j = 0;
              }
              if (k == 4 && i < intNumLen) {
                strNumChFormat = '万' + strNumChFormat;
              }
              else if (k == 8 && i < intNumLen) {
                k = 0;
                strNumChFormat = '亿' + strNumChFormat;
              }
              j++;
              k++;
            }
            while (strNumChFormat.indexOf("位") != -1) {
              strNumChFormat = strNumChFormat.replaceAll("位", " ");
            }
            if (strNumChFormat.substring(0, 2) == "一拾") {
              strNumChFormat = strNumChFormat.substring(1, strNumChFormat.length());
            }
            if (strNumChFormat.indexOf("点") >= 0) {
              String rebegin = strNumChFormat.substring(0,
                  strNumChFormat.indexOf("点"));
              String relast = strNumChFormat.substring(strNumChFormat.indexOf("点"),
                  strNumChFormat.length());
              for (int i = 1; i <= relast.length(); i++) {
                relast = relast.replaceAll("拾", "");
                relast = relast.replaceAll("百", "");
                relast = relast.replaceAll("千", "");
                relast = relast.replaceAll("万", "");
                relast = relast.replaceAll("亿", "");
              }
              strNumChFormat = rebegin + relast;
            }
          }
          catch (ArrayIndexOutOfBoundsException ex) {
            ex.printStackTrace();
          }
          catch (Exception ex) {
            ex.printStackTrace();
          }
          int off = strNumChFormat.indexOf("点");
          strNumChFormat = strBegin + strNumChFormat.substring(0);
        }
        else {
          strNumChFormat = "";
        }
        return strNumChFormat;
      }
      public static void main(String args[]) {
        while(true){
            try {//console输入
       
            Scanner sc = new Scanner(System.in);
            String number = sc.nextLine();
            //cofiguration输入
            //String number = args[0].toString();
          System.out.println("The number is: " + number);
          P28 P28 = new P28(number);
          System.out.println("Output String: " + P28.readNum());
        }
        catch (Exception ex) {
          System.out.println("Please input like that: javac P28 <number>");

            }
        }
      }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值