这个题挺有意思的,同时也有很多坑,注意题目是返回一个整数,而非长整数,所以用int足矣。
躺坑经验:(解题思路使用字符的ascii值进行数值的区间判断以及正负判断)
1.去除两端空白字符
2.去掉空白字符后,截断非0~9数字
3.判断首个字符是否为"+,-"符号

public int atoi (String str) {

        byte[] bytes = str.trim().getBytes();

        int value = 0;//返回值

        //正负字符byte值
        byte p = '+';
        byte n = '-';

        //0-9数字区间byte值
        byte zero = '0';
        byte nine = '9';

        if(bytes.length == 0) return value;

        //过滤掉非无用字符,并只用endIndex作为截断位
        int endIndex = 1;
        for (int i = 1; i < bytes.length; i++) {

            //判断是否为0~9数字
            if(bytes[i] < zero||bytes[i] > nine) {
                endIndex = i;
                break;
            }
            endIndex = i + 1;
        }

        //判断过滤后的值是否为空
        if(endIndex == 0) return value;

        for (int i = 0; i < endIndex; i++) {

            //如果第一个字符是正负符号,continue不做计算
            if(i == 0 && (bytes[i] == p || bytes[i] ==n)) continue;

            if(bytes[0] == n){//如果是正值-=
                value -= (bytes[i] % zero) * Math.pow(10, endIndex - 1 - i);
            }else{//否则+=
                value += (bytes[i] % zero) * Math.pow(10, endIndex - 1 - i);
            }

        }

        return value;

    }