原谅我的山顶洞人的方法

public int StrToInt(String str) {
        if(str == null || str.equals("0") || "".equals(str)){
            return 0;
        }
        char [] strs = str.toCharArray();
        int n = strs.length;

        if(strs.length == 11 || strs.length == 10){
            if(!specialJudge(str)){
                return 0;
            }
        }

        for(int i=0;i<n;i++){
            if(!judge(strs[i],i)){
                return 0;
            }
        }
        if(strs[0]=='-'){
            return -caculate(str);
        }else{
            return caculate(str);
        }

    }
    private boolean specialJudge(String str) {
        boolean flag = true;
        char [] cs;
        if(str.startsWith("-")){
            flag = false;
            cs = str.substring(1,str.length()).toCharArray();
        }else if(str.startsWith("+")){
            cs = str.substring(1,str.length()).toCharArray();
        }else{
            cs = str.toCharArray();
        }
        for (int i = 0; i < cs.length; i++) {
            if (i == 0) {
                if (cs[i] > '2') {
                    return false;
                }
            } else if (i == 1) {
                if (cs[i] > '1') {
                    return false;
                }
            } else if (i == 2) {
                if (cs[i] > '4') {
                    return false;
                }
            } else if (i == 3) {
                if (cs[i] > '7') {
                    return false;
                }
            } else if (i == 4) {
                if (cs[i] > '4') {
                    return false;
                }
            } else if (i == 5) {
                if (cs[i] > '8') {
                    return false;
                }
            } else if (i == 6) {
                if (cs[i] > '3') {
                    return false;
                }
            } else if (i == 7) {
                if (cs[i] > '6') {
                    return false;
                }
            } else if (i == 8) {
                if (cs[i] > '4') {
                    return false;
                }
            } else if (i == 9) {
                if (flag) {
                    if (cs[i] > '7') {
                        return false;
                    }
                } else {
                    if (cs[i] > '8') {
                        return false;
                    }
                }

            }
        }
        return true;
    }
    private int caculate(String str) {
        char [] strs = str.toCharArray();
        if(str.startsWith("+") || str.startsWith("-")){
            strs = str.substring(1, str.length()).toCharArray();
        }
        int sum = 0;
        switch (strs.length) {
        case 10:
            for(int i=0;i<strs.length;i++){
                sum+=transfer(strs[i])*base(strs.length-i);
            }
            break;
        case 9:
            for(int i=0;i<strs.length;i++){
                sum+=transfer(strs[i])*base(strs.length-i);
            }
            break;
        case 8:
            for(int i=0;i<strs.length;i++){
                sum+=transfer(strs[i])*base(strs.length-i);
            }
            break;
        case 7:
            for(int i=0;i<strs.length;i++){
                sum+=transfer(strs[i])*base(strs.length-i);
            }
            break;
        case 6:
            for(int i=0;i<strs.length;i++){
                sum+=transfer(strs[i])*base(strs.length-i);
            }
            break;
        case 5:
            for(int i=0;i<strs.length;i++){
                sum+=transfer(strs[i])*base(strs.length-i);
            }
            break;
        case 4:
            for(int i=0;i<strs.length;i++){
                sum+=transfer(strs[i])*base(strs.length-i);
            }
            break;
        case 3:
            for(int i=0;i<strs.length;i++){
                sum+=transfer(strs[i])*base(strs.length-i);
            }
            break;
        case 2:
            for(int i=0;i<strs.length;i++){
                sum+=transfer(strs[i])*base(strs.length-i);
            }
            break;
        case 1:
            for(int i=0;i<strs.length;i++){
                sum+=transfer(strs[i])*base(strs.length-i);
            }
            break;
        default:
            break;
        }
        return sum;
    }

    private int transfer(char ch){
        if(ch == '0'){
            return 0;
        }else if(ch =='1'){
            return 1;
        }else if(ch =='2'){
            return 2;
        }else if(ch =='3'){
            return 3;
        }else if(ch =='4'){
            return 4;
        }else if(ch =='5'){
            return 5;
        }else if(ch =='6'){
            return 6;
        }else if(ch =='7'){
            return 7;
        }else if(ch =='8'){
            return 8;
        }else{
            return 9;
        }
    }

    private int base(int i) {
        if(i==10){
            return 1000000000;
        }else if(i==9){
            return 100000000;
        }else if(i==8){
            return 10000000;
        }else if(i==7){
            return 1000000;
        }else if(i==6){
            return 100000;
        }else if(i==5){
            return 10000;
        }else if(i==4){
            return 1000;
        }else if(i==3){
            return 100;
        }else if(i==2){
            return 10;
        }else{
            return 1;
        }
    }
    // 可以使用ASCII字符表一个判断结束,但是一般会忘记字符对应ascii可显示数值,所以直接普判
    private boolean judge(char c,int index) {
        if((c == '+' && index==0)||(c == '-' && index==0) || c=='1' || c=='2' || c=='3' || c=='4'|| c=='5'|| c=='6'|| c=='7'|| c=='8'|| c=='9'|| c=='0'){
            return true;
        }else{
            return false;
        }
    }