這道題是我在網上看到的,趁有點空就寫了,寫的不好可以指出,如果各位道友有更好的辦法最好能大家分享下或提供一下建議
以下解決方案屬於我的原創:
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();
}
}