坑好多

将字符串转化为整数

http://www.nowcoder.com/questionTerminal/44d8c152c38f43a1b10e168018dcc13f

总结一下可能的坑:
1、字符串前后端可能有空格;
2、空串
3、字符串首个字符可能是正负号;
4、字符串中间可能有‘0’ - ‘9’之外的非法字符,如果有的话,那么只将第一个出现的非法字符之前的数字串转换为数字;
5、溢出,有正数溢出和负数溢出,所以要注意

    public static int atoi (String str) {
        // write code here

        if (str == null || str.length() == 0){
            return 0;
        }

        String s = str.trim();
        // 用于记录再字符串中非法字符出现之前的数字字符串的长度
        // 如果第一位是符号位,则

        int end = 0;

        for (int i = 0; i < s.length(); i++) {

            if (i == 0 && (s.charAt(i) == '-' || s.charAt(i) == '+')){
                continue;
            }

            if (s.charAt(i) > '9' || s.charAt(i) < '0'){
                end = i;
                break;
            }

            end = i + 1;
        }

        if (s.length() == 0 || end == 0){
            return 0;
        }

        int val = 0;
        int n  = s.length();
        int flag = s.charAt(0) == '-' ? 1 : 0;

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

            if (i == 0 && (s.charAt(i) == '-' || s.charAt(i) == '+')){
                continue;
            }

            if (s.charAt(i) <= '9' && s.charAt(i) >= '0'){

                val += (s.charAt(i) - '0') * Math.pow(10,end - i -1);
            }

        }

        if (flag == 1 && val == Integer.MAX_VALUE){
            return Integer.MIN_VALUE;
        }

        return flag == 1 ? -val : val;
    }
全部评论

相关推荐

不愿透露姓名的神秘牛友
06-27 14:11
很喜欢小米的新车,校招薪资每月22k,攒多久能买?
测试糕手手:别看工资,先看现金流存款。有50W存款以上再考虑,车是消耗品,选适合自己的重要。你有钱就当我没说过
点赞 评论 收藏
分享
05-26 22:25
门头沟学院 Java
Java小肖:不会是想叫你过去把你打一顿吧,哈哈哈
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务