文字數值轉換工具

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章