首页 > 试题广场 >

编程实现将中文的“贰仟零伍亿叁佰扒拾万零叁拾”转换为“200

[问答题]
编程实现将中文的“贰仟零伍亿叁佰扒拾万零叁拾”转换为“200503800030”,语言不限。
 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;
}

编辑于 2015-05-13 11:55:30 回复(0)
//写了个简单的,有点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();
 }
}
发表于 2015-03-15 21:08:18 回复(0)