您的位置:首页 > 编程语言 > Java开发

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

2013-04-26 16:33 495 查看
本功能实现的是你输入数字: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;
}
}
}
}


下面是输出结果







内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java
相关文章推荐