力扣第8题:字符串转换整数

一:题目描述:

1.

 2.测试样例:

二:具体分析:

1.

这道题的题目还是比较容易读懂的,但是,如果你亲自尝试,提交就会发生许多问题,下面来简单分析,1.给定的是一个字符串,要求返回一个int类型的整数 。2.给定的字符串中包含若干个空格,这些空格可能在字符串头部,尾部,中间 任意位置出现,题目要求要去除头部空格。3.给定的字符串带有符号:+或-,如果没有,默认为加号。4.读入每一个字符,遇到非数字之外的任意字符,则截断字符串,如果直接就是非数字(除符号位以外)直接返回0:例如:(1).+-12--->0 (2).ssss   202002 --->0 (3)3.1415926--->3。5. 防止越界问题,因为返回的是int类型,如果超过int的最大值,直接截断,返回最大值,最小值同理。

2.代码实现

package Exercise;

public class E81502 {
    public static void main(String[] args) {
        int i = myAtoi("     22000000000000000004193 with words");
        System.out.println(i);
    }

    public static int myAtoi(String s) {
        // 使用long类型
        //如果为空,直接返回0
        if (s.length() == 0) {
            return 0;
        }
        int index = 0;//遍历字符串中字符的位置
        long res = 0;//最终结果
        int sign = 1;//符号,1是正数,-1是负数,默认为正数
        int length = s.length();
        // 过滤掉字符串前面的空格
        while (index < length && s.charAt(index) == ' ') {
            index++;
        }
        if (index == length) {
            return 0;
        }
        //判断符号
        if (s.charAt(index) == '-' || s.charAt(index) == '+') {
            sign = s.charAt(index++) == '+' ? 1 : -1;
        }
        for (; index < length; index++) {
            //取出字符串中字符,然后转化为数字
            int digit = s.charAt(index) - '0';
            //按照题中的要求,读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。
            //字符串的其余部分将被忽略。如果读取了非数字,后面的都要忽略
            if (digit < 0 || digit > 9)
                break;

            res = res * 10 + digit;

            //越界处理
            if (res * sign > Integer.MAX_VALUE) {
                return Integer.MAX_VALUE;
            }
            if (res * sign < Integer.MIN_VALUE) {
                return Integer.MIN_VALUE;
            }
        }
        return (int) (sign * res);
    }
}

 


版权声明:本文为m0_58354370原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。