Java中输入一个整数,输出其对应汉语读法(中文读法含注释)

5 篇文章 0 订阅

 Java源文件名:ReadChineseTest.java

package java1;
/**
 * @author com.whocares@183
 * @version 1.0
 */
import java.util.Scanner;
public class ReadChineseTest {
    //全局变量
    static String[] chNum = new String[]{"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};//将对应数字中文化
    static String[] bits = new String[]{"十", "百", "千"};//单位
    static int count = 0;
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        String result = "";
        int zeros14 = 0, zeros58 = 0;
        while(true) {
            result = "";
            count = 0;
            zeros14 = 0;
            zeros58 = 0;
            System.out.println("请输入一个整数:");
            long longNum = scan.nextLong();//输入整数的代码
            String str = String.valueOf(longNum);
            String str2 = "", str3 = "", str4 = "";
            int len = str.length();//求出这个长整数的位数
            if(len <= 4){
                System.out.println(method1(str));
            }else if(len <= 8){
                for(int i = 0;i < len;i++){//计算出在第五位到第八位的字符串具体值,赋值给str2
                    if(i < len-4) {
                        str2 += str.charAt(i);//5-8位
                    }else {
                        str3 += str.charAt(i);//1-4位
                    }
                }
                zeros14 = methods3(str3);
                if(zeros14 == 4){//如果1-4位都为0的话,值位true
                    result += method1(str2) + "万";
                }else {
                    str3 = methods4(str3);//判断1-4位是否有前置0
                    if (count == 0) {
                        result += method1(str2) + "万" + method1(str3);
                    } else {
                        result += method1(str2) + "万零" + method1(str3);
                    }
                }
                System.out.println(result);
            }else if(len <= 12){
                for(int i = 0;i < len;i++){
                    if(i < len - 8){
                        str2 += str.charAt(i);//9-12位
                    }else if(i < len - 4){
                        str3 += str.charAt(i);//5-8位
                    }else {
                        str4 += str.charAt(i);//1-4位
                    }
                }
                zeros14 = methods3(str4);
                count = 0;//千万不要忘记重置变量
                zeros58 = methods3(str3);
                if(zeros14 == 4 && zeros58 == 4){//当第1-8位全部为0的情况
                    result += method1(str2) + "亿";
                }else if(zeros14 != 4 &&zeros58 == 4){//1-4位不均为0,5-8位均为0
                    result += method1(str2) + "亿零" + method1(str4);
                }else if(zeros14 == 4 && zeros58 != 4) {//1-4位为0,5-8位不全为0
                    zeros58 = methods3(str3);
                    if(zeros58 != 0) {//如果前置有0,则输出一个零
                        result += method1(str2) + "亿零" + method1(str3) + "万";
                    }else {
                        result += method1(str2) + "亿" + method1(str3) + "万";
                    }
                }else {//剩下的一种情况是1-9位都不为0
                    str3 = methods4(str3);//判断5-8位是否有前置0
                    if (count == 0) {
                        result += method1(str2) + "亿" + method1(str3);
                    } else {
                        result += method1(str2) + "亿零" + method1(str3);
                    }
                    count = 0;//重置count的初始值
                    str4 = methods4(str4);//判断5-8位是否有前置0
                    if (count == 0) {
                        result += "万" + method1(str4);
                    } else {
                        result += "万零" + method1(str4);
                    }
                }
                System.out.println(result);
            }

        }
    }
    public static String method1(String str) {
        str = methods4(str);//删除前置0
        int len = str.length(), num;//len是str的字符串长度
        String result = "";
        //计算四位数的方法
        if (len == 4 ) {
            //情况一:这个数为四位数(最高位不为零)并且第二、三、四位数均为0的情况(有三个0的情况)
            if ((str.charAt(1) == '0') && (str.charAt(2) == '0') && (str.charAt(3) == '0')) {
                result += chNum[str.charAt(0) - 48] + "千";
                return result;
            }
            //情况二:这个数为四位数(最高位不为零)并且第二位和第三位为0的情况,在以下情况不用考虑最后一位,因为可以推理出最后一位数一定部位不为0
            //(有两个0的情况的第一种)如1008
            if((str.charAt(1) == '0') && (str.charAt(2) == '0') && str.charAt(0) !=0){
                result += chNum[str.charAt(0) - 48] + "千" + "零" + chNum[str.charAt(3) - 48];
                return result;
            }
            //情况三:这个数为四位数(最高位不为零)并且第三位和第四位为0的情况,在以下情况不用考虑最后一位,因为可以推理出最后一位数一定部位不为0
            //有两个0的情况的第二种如1800(有两种0的情况的第三种在下面的普通情况下输出正确,不用考虑,如1080)
            if((str.charAt(2) == '0') && (str.charAt(3) == '0')){
                result += chNum[str.charAt(0) - 48] + "千" + chNum[str.charAt(1) - 48] + "百";
                return result;
            }
        }
        //计算三位数的方法
        if(len == 3){
            //情况一:存在两个0的情况如;100
            if((str.charAt(1) == '0')&&(str.charAt(2) == '0')){
                result += chNum[str.charAt(0) - 48] + "百";
                return result;
            }
        }
        return method2(str);
    }
    //数字中文读法的普遍情况的代码如下:
    public static String method2(String str){
        int len = str.length(), num;//len是str的字符串长度
        String result = "";
        for (int i = 0; i < len; i++) {
            num = str.charAt(i) - 48;//将字符化为整数,比如‘1’化为1
            if (i != len - 1 && num != 0) {//当这个数不是最后一位且不是零的时候
                result += chNum[num] + bits[len - 2 - i];
            } else if ((num == 0) && (i == len - 1) && len != 1) {;//空语句当num==0时,而且这个数不是一位数时,//
                // 并且这个0是最后一位数,则该0不应该被读出。
            } else {
                result += chNum[num];
            }
        }
        return result;
    }
    //查看前置0的个数,如0900、0090
    public static int methods3(String str){
        count = 0;
        while(str.charAt(count) == '0'){
            count++;
            if(count == 4){
                break;
            }
        }
        return count;
    }
    //删除前置0,即删除0900前面的0,得到字符串“900”
    public static String methods4(String str){
        String str1 = "";
        int temp = methods3(str);
        if(temp == 0){
            return str;
        }else{
            for(int i = temp; i < str.length();i++){
                str1 += str.charAt(i);
            }
        }
        return str1;
    }
}
 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值