这道题是我在网上看到的,趁有点空就写了,写的不好可以指出,如果各位道友有更好的办法最好能大家分享下或提供一下建议
以下解决方案属于我的原创:
package gdut.clb.numberchange;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
* 输入的字符串长度小于等于八
* 示例:
* 输入:1234567 输出:一百二十三万四千五百六十七
* 输入:0001 输出:一
* 输入:1001 输出:一千零一
* 输入:1100 输出:一千一百
* 输入:10100 输出:一万零一百
* 输入:0010 输出:十
* 输入:000001 输出:一
* 输入:10000001 输出:一千万零一
* 输入:10000010 输出:一千万零十
* 输入:10000100 输出:一千万零一百
* 输入:11000000 输出:一千一百万
* */
public class NumberChange {
private static Map<String,String> changeMap = new HashMap<String,String>() ;
static{
changeMap.put("0", "零") ;
changeMap.put("1", "一") ;
changeMap.put("2", "二") ;
changeMap.put("3", "三") ;
changeMap.put("4", "四") ;
changeMap.put("5", "五") ;
changeMap.put("6", "六") ;
changeMap.put("7", "七") ;
changeMap.put("8", "八") ;
changeMap.put("9", "九") ;
}
public static void main(String[] args) {
System.out.println("请输入您要转换的数字:") ;
Pattern pattern = Pattern.compile("[0-9]*") ;
String input = null ;
BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in)) ;
try {
input = buffer.readLine() ;
} catch (IOException e) {
e.printStackTrace();
return ;
}
Matcher matcher = pattern.matcher(input) ;
if(!matcher.matches()){
System.out.println("您输入的字符不都为数字,无法转换!") ;
return ;
}
if(8<input.length()){
System.out.println("您输入的数字超过8个!") ;
return ;
}
String changeString = change(input) ;
System.out.println("result :"+changeString);
}
private static String change(String input) {
StringBuilder returnString = new StringBuilder() ;
int num = input.length() ;
String temp ;
boolean start = false ;
int zero = 0 ;
switch (num) {
case 8:
temp = input.charAt(num-8)+"" ;
if("0".equals(temp)){
if(zero==0){
}
}else{
start = true ;
returnString.append(changeMap.get(temp)+"千") ;
zero = 0 ;
}
case 7:
temp = input.charAt(num-7)+"" ;
if("0".equals(temp)){
if(start){
zero++ ;
}
}else{
start = true ;
returnString.append(changeMap.get(temp)+"百") ;
zero = 0 ;
}
case 6:
temp = input.charAt(num-6)+"" ;
if("0".equals(temp)){
if(start){
zero++ ;
}
}else{
if(zero==1) returnString.append("零") ;
start = true ;
if("1".equals(temp)) returnString.append("十") ;
else returnString.append(changeMap.get(temp)+"十") ;
zero = 0 ;
}
case 5:
temp = input.charAt(num-5)+"" ;
if("0".equals(temp)){
if(start){
returnString.append("万") ;
zero = 0 ;
}
}else{
if(zero>=1)
returnString.append("零") ;
start = true ;
returnString.append(changeMap.get(temp)+"万") ;
zero = 0 ;
}
case 4:
temp = input.charAt(num-4)+"" ;
if("0".equals(temp)){
if(start){
zero++ ;
}
}else{
start = true ;
returnString.append(changeMap.get(temp)+"千") ;
zero = 0 ;
}
case 3:
temp = input.charAt(num-3)+"" ;
if("0".equals(temp)){
if(start){
zero++ ;
}
}else{
if(zero>=1) returnString.append("零") ;
start = true ;
returnString.append(changeMap.get(temp)+"百") ;
zero = 0 ;
}
case 2:
temp = input.charAt(num-2)+"" ;
if("0".equals(temp)){
if(start){
zero ++ ;
}
}else{
if(zero>=1) returnString.append("零") ;
start = true ;
if("1".equals(temp)) returnString.append("十") ;
else returnString.append(changeMap.get(temp)+"十") ;
zero = 0 ;
}
case 1:
temp = input.charAt(num-1)+"" ;
if("0".equals(temp)){
if(start){
}
}else{
if(zero>=1) returnString.append("零") ;
start = true ;
returnString.append(changeMap.get(temp)) ;
}
break;
default:
break;
}
return returnString.toString();
}
}