比较冗长,但是要可读性强就可以了

public int StrToInt(String str) {
    if(str==null || str.length()==0){
        return 0;
    }
    char [] chars=str.toCharArray();
    int [] nums=new int[chars.length];
    int res=0;
    int isSymbol=0;
    for(int i=0;i<chars.length;i++){
        int tmp=chars[i]-'0';
        if(i==0){
            if(chars[i]=='+'){
                isSymbol=1;
            } else if(chars[i]=='-'){
                isSymbol=-1;
            } else if(tmp<=9 && tmp>=0  ){
                nums[i]=tmp;
            } else{
                res=0;
                return res;
            }
        }else {
            if(tmp<=9 && tmp>=0){
                    nums[i]=tmp;
                }
            }else{
                res=0;
                return res;
            }
        }
    }
    // 求和方式1
    if(isSymbol==0){
        for(int i=nums.length-1;i>=0;i--){
            res+=nums[i]*Math.pow(10,nums.length-1-i);
        }
    }else{
        for(int i=nums.length-1;i>=1;i--){
            res+=nums[i]*Math.pow(10,nums.length-1-i);
        }
    }
    //求和方式2 
    if(isSymbol==0){
        for(int i=0;i<nums.length;i++){
            res=res*10+nums[i];
            if(res>Integer.MAX_VALUE){
                return 0;
            }
        }
    }else{
        for(int i=1;i<nums.length;i++){
            res=res*10+nums[i];
            if(res>Integer.MAX_VALUE){
                return 0;
            }
        }
    }
    if(isSymbol==-1){
        res=-res;
    }
    return res;
    }