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(); } }