题目

代码分析

分为两个部分进行,一个是截取正确的字符串,一个就是转换,转换的过程中,要注意边界的确定,在还剩一位的情况下,进行判断

代码实现

public class Solution {


    public static String vaildStr(String str)
    {
        StringBuilder sb=new StringBuilder();
        int i=0;
        str=str.trim();
        if(str.charAt(0)=='+'||str.charAt(0)=='-')
        {
            sb.append(str.charAt(0));
            i=1;
        }
        for(;i<str.length();i++)
        {
            if(str.charAt(i)>='0'&&str.charAt(i)<='9')
            {
                sb.append(str.charAt(i));
            }else
            {
                break;
            }
        }
        return sb.toString();
    }
    public int atoi(String str) {
        if(str.length()==0) return 0;
        //找出连续的数字
        str=vaildStr(str);
        if(str.length()==0) return 0;
        char[] chas = str.toCharArray();
        boolean flag = chas[0] == '-' ? false : true;
        int i = (chas[0] == '+' || chas[0] == '-') ? 1 : 0;
        int cur = 0;
        for (; i < chas.length; i++) {
            cur = cur * 10 + (-1) * (chas[i] - '0');
            if (i == chas.length - 2) {
                if (cur < -214748364) {
                    //超过了范围
                    return flag ? Integer.MAX_VALUE : Integer.MIN_VALUE;
                } else if (cur == -214748364) {
                    if (chas[i + 1] - '0' <= 7) {
                        int temp = cur * 10 + (-1) * (chas[i + 1] - '0');
                        return flag ? temp * (-1) : temp;
                    } else if (chas[i + 1] - '0' == 8) {
                        int temp = cur * 10 + (-1) * (chas[i + 1] - '0');
                        return flag ? Integer.MAX_VALUE : temp;
                    } else {
                        return flag ? Integer.MAX_VALUE : Integer.MIN_VALUE;
                    }
                }
            }
        }
        return flag ? cur * -1 : cur;
    }
}

学习情况

1次