本功能实现的是你输入数字:123 返回对应汉语读法:一百二十三
输入:100 返回:一百
输入:101返回:一百零一
还是实现了对应的是否是数字判断和为空判断。最重要是实现重复尝试该功能。
哈哈自夸一下,其实 自己总结一下自己。欢迎大家评论和大家提供意见。好让我知道我那里不足。
好了不多说了大家来看看代码吧
- package com.test.oop;
- import java.util.Scanner;
- public class TestNumToChina {
- /**
- * 实现数字与汉字之间的转换.
- * @param num 拆分的数字.
- * @param pos 数字所在字符里面的位置(由字符左边开始数的位置).
- * @param length 输入数字的长度.
- * @return 返回对应数字的汉字.
- */
- public String getChina(char num,Integer pos,Integer length){
- String str = "";
- switch (num) {
- case '0':
- str = "零";
- break;
- case '1':
- if(length-pos != 6 && length-pos != 2){
- str = "一"+""+getWY(length-pos);
- }
- break;
- case '2':
- str = "二"+""+getWY(length-pos);
- break;
- case '3':
- str = "三"+""+getWY(length-pos);
- break;
- case '4':
- str = "四"+""+getWY(length-pos);
- break;
- case '5':
- str = "五"+""+getWY(length-pos);
- break;
- case '6':
- str = "六"+""+getWY(length-pos);
- break;
- case '7':
- str = "七"+""+getWY(length-pos);
- break;
- case '8':
- str = "八"+""+getWY(length-pos);
- break;
- case '9':
- str = "九"+""+getWY(length-pos);
- break;
- }
- return str;
- }
- /**
- * 返回万或亿(汉语读法).
- * @param pos 字符所在的位置 (由字符右边开始数的位置).
- * @return
- */
- public String getWY(Integer pos){
- String str = "";
- if(pos == 5){
- str = "万";
- }
- if(pos == 9){
- str = "亿";
- }
- return str;
- }
- /**
- * 返回十百千(汉语读法).
- * @param pos 字符所在的位置 (由字符左边开始数的位置).
- * @param length 字符长度.
- * @return
- */
- public String getPos(Integer pos,Integer length){
- String str = "";
- switch (length-pos) {
- case 1:
- break;
- case 2:
- str = "十";
- break;
- case 3:
- str = "百";
- break;
- case 4:
- str = "千";
- break;
- case 6:
- str = "十";
- break;
- case 7:
- str = "百";
- break;
- case 8:
- str = "千";
- break;
- }
- return str;
- }
- /**
- * 获取总读法.
- * @param nums 数字字符分解的数组.
- * @param length 字符长度.
- * @param text 输入的字符.
- * @return
- */
- public String getAllChina(char [] nums,Integer length,String text ){
- String china = "";
- for (int i = 0; i < nums.length; i++) {
- //把第一个字符和最后一个字符不加入0的判断.
- if(i <nums.length-1){
- char a = text.charAt(i+1);
- char b = text.charAt(i);
- //如果当前字符不等于0 且下一个字符等于0时 获取当前字符的汉语读法
- if(a == '0' && b != '0'){
- china += getChina(nums[i], i,length)+""+getPos(i, length);
- }
- //如果当前字符等于0且下一个字符不等于0就直接返回零
- if (a != '0' && b == '0'){
- china += getChina(nums[i], i,length);
- }
- //如果都不等0就直接返回当前汉语读法
- if(a != '0' && b != '0'){
- china += getChina(nums[i], i,length)+""+getPos(i, length);
- }
- if(a == '0' && b == '0'){
- //如果输入的数字达到亿,且前面没有千百十都不存在 则 万不要加上
- if(length == 9){
- if(china.indexOf("千") > 0
- || china.indexOf("百") > 0
- || china.indexOf("十") > 0){
- china += getWY(length - i);
- }
- }else{
- china += getWY(length - i);
- }
- }
- }else if(text.charAt(i) != '0'){
- china += getChina(nums[i], i,length)+""+getPos(i, length);
- }
- }
- return china;
- }
- /**
- * 判断字符是否是数字.
- * @param str 输入的字符.
- * @return
- */
- public static boolean isNum(String str){
- return str.matches("^[-+]?(([0-9]+)([.]([0-9]+))?|([.]([0-9]+))?)$");
- }
- /**
- * 判断是否重新尝试.
- * @param sc 输入字符流.
- * @return
- */
- public boolean isRetry(Scanner sc){
- boolean status = false;
- String y = sc.nextLine();
- if(y.equals("y")){
- System.out.print("哈哈!欢迎再次尝试.");
- status = true;
- }
- if(!y.equals("y") && !y.equals("n")){
- System.out.print("输入非法,是不是重新尝试? y/n :");
- status = isRetry(sc);
- }
- if(y.equals("n")){
- System.out.println("欢迎下次再来,bye!");
- }
- return status;
- }
- public static void main(String[] args) {
- while(true){
- Scanner sc = new Scanner(System.in);
- TestNumToChina tc = new TestNumToChina();
- System.out.print("请输入数字:");
- String text = sc.nextLine();
- if(null == text || "".equals(text)){
- System.out.println("输入非法,没有任何输入!");
- continue;
- }
- if(!isNum(text)){
- System.out.println("输入非法,输入的不是数字!");
- continue;
- }
- if(isNum(text)){
- String china = tc.getAllChina(text.toCharArray(),text.length(),text);
- System.out.println("汉语读法为:"+china);
- System.out.print("是不是重新尝试? y/n :");
- if(tc.isRetry(sc)){
- continue;
- }
- break;
- }
- }
- }
- }
下面是输出结果
转载于:https://blog.51cto.com/5462361/1187537