function getNumb(str) {
var obj = {"亿": 100000000,"万": 10000,"仟":1000,"佰":100,"拾":10,"壹":1,"贰": 2,"叁": 3,"肆": 4,"伍": 5,"陆": 6,"柒": 7,"捌": 8,"玖": 9},
arr = str.replace(/(零|佰|^)拾/g, "$1壹拾").replace(/零/g, "").split(/(亿|万|仟|佰|拾)/).filter(function (a) {return a != ""}),
a = 0, l = 0, f,n;
for (var i = 0; i < arr.length;i = i + 2 ) {
f = arr[i],n = arr[i + 1];
if (/亿|万/.test(f)) {
a += l * obj[f];l = 0;
i --;
}else if (/亿|万/.test(n)) {
a += (l + obj[f]) * obj[n];l = 0;
} else {
l += obj[f] * (obj[n] ? obj[n] : 1);
}
}
return a + l;
}
//写了个简单的,有点low啊,复制过来格式乱了
package exercise;
//编程实现将中文的“贰仟零伍亿叁佰扒拾万零叁拾”转换为“200503800030”
public class Test10 {
public static void main(String[] args) {
String str = "贰仟零伍亿叁佰捌拾万零叁拾";
StringBuilder result = new StringBuilder();
String[] yi = str.split("亿");
String[] wang;
//按4位拆分,这部分太罗嗦了可以优化下
if(yi.length == 2) {
result.append(getNum(yi[0]));
wang = yi[1].split("万");
if(wang.length == 2) {
result.append(getNum(wang[0]));
result.append(getNum(wang[1]));
} else if(yi[1].contains("万")) {
result.append(getNum(wang[0]));
result.append("0000");
} else {
result.append("0000");
result.append(getNum(wang[0]));
}
} else if(str.contains("亿")) {
result.append(getNum(yi[0]));
result.append("00000000");
} else {
wang = yi[0].split("万");
if(wang.length == 2) {
result.append(getNum(wang[0]));
result.append(getNum(wang[1]));
} else if(yi[0].contains("万")) {
result.append(getNum(wang[0]));
result.append("0000");
} else {
result.append("0000");
result.append(getNum(wang[0]));
}
}
//去掉前面多余的0
while(result.toString().startsWith("0")) {
result.deleteCharAt(0);
}
System.out.println(result.toString());
}
public static String getNum(String str) {
StringBuilder num = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
switch (c) {
case '壹':
num.append(1);
break;
case '贰':
num.append(2);
break;
case '叁':
num.append(3);
break;
case '肆':
num.append(4);
break;
case '伍':
num.append(5);
break;
case '陆':
num.append(6);
break;
case '柒':
num.append(7);
break;
case '捌':
num.append(8);
break;
case '玖':
num.append(9);
break;
case '仟':
if(i == str.length() - 1) {
num.append("000");
}
break;
case '佰':
if(i == str.length() - 1) {
num.append("00");
}
break;
case '拾':
if(i == str.length() - 1) {
num.append("0");
}
break;
case '零':
if(str.contains("仟") && !str.contains("拾")) {
num.append("00");
} else if(!str.contains("仟") && str.contains("拾")) {
num.append("00");
} else if(!str.contains("仟") && !str.contains("拾")) {
num.append("000");
}
break;
default:
break;
}
}
//加前置0
if(num.length() != 4) {
if(num.length() == 3) {
num.insert(0, "0");
} else if(num.length() == 2) {
num.insert(0, "00");
} else if(num.length() == 1) {
num.insert(0, "000");
}
}
return num.toString();
}
}