本功能实现的是你输入数字:123 返回对应汉语读法:一百二十三

输入:100 返回:一百

输入:101返回:一百零一

还是实现了对应的是否是数字判断和为空判断。最重要是实现重复尝试该功能。

哈哈自夸一下,其实 自己总结一下自己。欢迎大家评论和大家提供意见。好让我知道我那里不足。

好了不多说了大家来看看代码吧

 

  1. package com.test.oop;  
  2.  
  3. import java.util.Scanner;  
  4.  
  5. public class TestNumToChina {  
  6.       
  7.     /**  
  8.      * 实现数字与汉字之间的转换.  
  9.      * @param num    拆分的数字.  
  10.      * @param pos     数字所在字符里面的位置(由字符左边开始数的位置).  
  11.      * @param length  输入数字的长度.  
  12.      * @return   返回对应数字的汉字.  
  13.      */ 
  14.     public String getChina(char num,Integer pos,Integer length){  
  15.         String str = "";  
  16.         switch (num) {  
  17.         case '0':  
  18.             str = "零";  
  19.             break;  
  20.         case '1':  
  21.             if(length-pos != 6 && length-pos != 2){  
  22.                 str = "一"+""+getWY(length-pos);  
  23.             }  
  24.             break;  
  25.         case '2':  
  26.             str = "二"+""+getWY(length-pos);  
  27.             break;  
  28.         case '3':  
  29.             str = "三"+""+getWY(length-pos);  
  30.             break;  
  31.         case '4':  
  32.             str = "四"+""+getWY(length-pos);  
  33.             break;  
  34.         case '5':  
  35.             str = "五"+""+getWY(length-pos);  
  36.             break;  
  37.         case '6':  
  38.             str = "六"+""+getWY(length-pos);  
  39.             break;  
  40.         case '7':  
  41.             str = "七"+""+getWY(length-pos);  
  42.             break;  
  43.         case '8':  
  44.             str = "八"+""+getWY(length-pos);  
  45.             break;  
  46.         case '9':  
  47.             str = "九"+""+getWY(length-pos);  
  48.             break;  
  49.         }  
  50.         return str;  
  51.     }  
  52.       
  53.     /**  
  54.      * 返回万或亿(汉语读法).  
  55.      * @param pos 字符所在的位置 (由字符右边开始数的位置).  
  56.      * @return  
  57.      */ 
  58.     public String getWY(Integer pos){  
  59.         String str = "";  
  60.         if(pos == 5){  
  61.             str = "万";  
  62.         }  
  63.         if(pos == 9){  
  64.             str = "亿";  
  65.         }  
  66.         return str;  
  67.     }  
  68.       
  69.     /**  
  70.      * 返回十百千(汉语读法).  
  71.      * @param pos     字符所在的位置 (由字符左边开始数的位置).  
  72.      * @param length 字符长度.  
  73.      * @return  
  74.      */ 
  75.     public String getPos(Integer pos,Integer length){  
  76.         String str = "";  
  77.         switch (length-pos) {  
  78.         case 1:  
  79.               
  80.             break;  
  81.         case 2:  
  82.             str = "十";  
  83.             break;  
  84.         case 3:  
  85.             str = "百";  
  86.             break;  
  87.         case 4:  
  88.             str = "千";  
  89.             break;  
  90.         case 6:  
  91.             str = "十";  
  92.             break;  
  93.         case 7:  
  94.             str = "百";  
  95.             break;  
  96.         case 8:  
  97.             str = "千";  
  98.             break;  
  99.         }  
  100.           
  101.         return str;  
  102.     }  
  103.       
  104.     /**  
  105.      * 获取总读法.  
  106.      * @param nums   数字字符分解的数组.  
  107.      * @param length  字符长度.  
  108.      * @param text     输入的字符.  
  109.      * @return  
  110.      */ 
  111.     public String getAllChina(char [] nums,Integer length,String text ){  
  112.         String china = "";  
  113.         for (int i = 0; i < nums.length; i++) {  
  114.               
  115.             //把第一个字符和最后一个字符不加入0的判断.  
  116.             if(i <nums.length-1){  
  117.                 char a = text.charAt(i+1);  
  118.                 char b = text.charAt(i);  
  119.                   
  120.                 //如果当前字符不等于0 且下一个字符等于0时 获取当前字符的汉语读法  
  121.                 if(a == '0' && b != '0'){  
  122.                     china += getChina(nums[i], i,length)+""+getPos(i, length);  
  123.                 }  
  124.                 //如果当前字符等于0且下一个字符不等于0就直接返回零  
  125.                 if (a != '0' && b == '0'){  
  126.                     china += getChina(nums[i], i,length);  
  127.                 }  
  128.                 //如果都不等0就直接返回当前汉语读法    
  129.                 if(a != '0' && b != '0'){  
  130.                     china += getChina(nums[i], i,length)+""+getPos(i, length);  
  131.                 }  
  132.                 if(a == '0' && b == '0'){  
  133.                     //如果输入的数字达到亿,且前面没有千百十都不存在 则 万不要加上  
  134.                     if(length == 9){  
  135.                         if(china.indexOf("千") > 0 
  136.                            || china.indexOf("百") > 0 
  137.                            || china.indexOf("十") > 0){  
  138.                             china += getWY(length - i);  
  139.                         }  
  140.                     }else{  
  141.                         china += getWY(length - i);  
  142.                     }  
  143.                 }  
  144.             }else if(text.charAt(i) != '0'){  
  145.                 china += getChina(nums[i], i,length)+""+getPos(i, length);  
  146.             }  
  147.         }  
  148.         return china;  
  149.     }  
  150.       
  151.       
  152.     /**  
  153.      * 判断字符是否是数字.  
  154.      * @param str  输入的字符.  
  155.      * @return  
  156.      */ 
  157.     public static boolean isNum(String str){          
  158.         return str.matches("^[-+]?(([0-9]+)([.]([0-9]+))?|([.]([0-9]+))?)$");     
  159.     }  
  160.       
  161.     /**  
  162.      * 判断是否重新尝试.  
  163.      * @param sc 输入字符流.  
  164.      * @return  
  165.      */ 
  166.     public boolean isRetry(Scanner sc){  
  167.         boolean status = false;  
  168.         String y = sc.nextLine();  
  169.         if(y.equals("y")){  
  170.             System.out.print("哈哈!欢迎再次尝试.");  
  171.             status =  true;  
  172.         }  
  173.         if(!y.equals("y") && !y.equals("n")){  
  174.             System.out.print("输入非法,是不是重新尝试? y/n :");  
  175.             status = isRetry(sc);  
  176.         }  
  177.         if(y.equals("n")){  
  178.             System.out.println("欢迎下次再来,bye!");  
  179.         }  
  180.         return status;  
  181.     }  
  182.       
  183.     public static void main(String[] args) {  
  184.         while(true){  
  185.             Scanner sc = new Scanner(System.in);  
  186.             TestNumToChina tc = new TestNumToChina();  
  187.               
  188.             System.out.print("请输入数字:");  
  189.             String text = sc.nextLine();  
  190.               
  191.             if(null == text || "".equals(text)){  
  192.                 System.out.println("输入非法,没有任何输入!");  
  193.                 continue;  
  194.             }  
  195.             if(!isNum(text)){  
  196.                 System.out.println("输入非法,输入的不是数字!");  
  197.                 continue;  
  198.             }  
  199.             if(isNum(text)){  
  200.                 String china = tc.getAllChina(text.toCharArray(),text.length(),text);  
  201.                 System.out.println("汉语读法为:"+china);  
  202.                   
  203.                 System.out.print("是不是重新尝试? y/n :");  
  204.                 if(tc.isRetry(sc)){  
  205.                     continue;  
  206.                 }  
  207.                   
  208.                 break;  
  209.             }  
  210.         }  
  211.     }  
  212. }  

 

下面是输出结果

java实现在控制台输入亿以内的数字转换成汉语读法_java 

 

java实现在控制台输入亿以内的数字转换成汉语读法_java_02