public class String2numTools {
private static char[] one2nine={'一','二','三','四','五','六','七','八','九','兩','零'};
private static char[] unit={'十','百','千','億'};
public static int string2num(String str){
String[] st=str.split("萬");
int char1num=0;
int char2num=0;
if(st.length==2){
char[] char2=st[1].toCharArray(); //萬以內的運算
for (int i = char2.length-1; i >= 0; i--) {
if(isNumCahr(char2[i])){
char2num+=change2num(char2[i]);
}else if(isUnit(char2[i])){
char2num+=checkUnit(char2[i],change2num(char2[--i]));
}
}
char[] char1=st[0].toCharArray(); //千萬以下的運行
for (int i = char1.length-1; i >= 0; i--) {
if(isNumCahr(char1[i])){
char1num+=change2num(char1[i]);
}else if(isUnit(char1[i])){
char1num+=checkUnit(char1[i],change2num(char1[--i]));
}
}
return char1num*10000+char2num; //乘以1萬 加上萬內的值
}else if (st.length==1) {
char[] char2=st[0].toCharArray(); //萬以內的運算
for (int i = char2.length-1; i >= 0; i--) {
if(isNumCahr(char2[i])){
char2num+=change2num(char2[i]);
}else if(isUnit(char2[i])){
char2num+=checkUnit(char2[i],change2num(char2[--i]));
}
}
return char2num;
}
return 0;
}
private static boolean isNumCahr(char ch){ //判斷是否是字符數字
for (char chr : one2nine) {
if(ch==chr){
return true;
}
}
return false;
}
private static boolean isUnit(char ch){ //判斷是否爲單位
for (char chr : unit) {
if(ch==chr){
return true;
}
}
return false;
}
private static int change2num(char ch){
int num=0;
switch (ch) {
case '一':
num=1;
break;
case '二':
num=2;
break;
case '兩':
num=2;
break;
case '三':
num=3;
break;
case '四':
num=4;
break;
case '五':
num=5;
break;
case '六':
num=6;
break;
case '七':
num=7;
break;
case '八':
num=8;
break;
case '九':
num=9;
break;
}
return num;
}
private static int checkUnit(char ch,int ch2){ //判斷是什麼單位和前一位數字相乘後的值
int num=0;
switch (ch) {
case '十':
num=10*ch2;
break;
case '百':
num=100*ch2;
break;
case '千':
num=1000*ch2;
break;
}
return num;
}
public static void main(String[] args) {
System.out.println(String2numTools.string2num("六千零三萬五千兩百三十一"));
}
}
輸出結果: 60035231