《剑指offer》把字符串转换成整数-Java

把字符串转换成整数

http://www.nowcoder.com/questionTerminal/1277c681251b4372bdef344468e4f26e

思路:

这个题本身不难,就是字符串转数值,从前到后一个一个遍历就好了。难的是处理各种异常case:
字符串为空
字符串为“0”
首位是“+”or“-”
首位是“+”“-”“0-9”以外的字符
数值的上下溢出(Java中最大正整数是2147483647,最大负整数是-2147483648)

public class Solution {
    public int StrToInt(String str) {
        
        int fuhao = 0; //标示首位是否是符号位
        int target = 0; //标示这个数最终是正还是负数,这里初始化为0,是因为下面判断要用到。如果初始化为-1的话,下面判断上溢出,是进不去条件的
        long value = 0;
        
        if(str.length() == 0 || str.equals("")){
            return 0;
        }
        
        if(str.charAt(0) == '+'){
            fuhao = 1;
            target = 0;
        }else if(str.charAt(0) == '-'){
            fuhao = 1;
            target = 1; 
        }else if(str.charAt(0) < '0' || str.charAt(0) > '9'){    //第一位就是非法字符的话,直接返回0
            return 0;
        }
        
        for(int i = fuhao; i < str.length(); i ++){
            if(str.charAt(i) >= '0' && str.charAt(i) <= '9'){
                value = value * 10 + (str.charAt(i) - '0');
                if(target == 0 && value > Integer.MAX_VALUE){    //上溢出
                    return 0;
                }
                if(target == 1 && (-1)*value < Integer.MIN_VALUE){    //下溢出,value前面一定要加(-1),因为是和负数做比较
                    return 0;
                }
            }else{
                return 0;    //非法字符
            }
        }
        
        if(target == 1)
            return (int) (-1 * value);
        else
            return (int) value;
    }
}


全部评论
判断第一位是非法字符的时候应用||吧。
点赞 回复 分享
发布于 2020-05-04 11:22

相关推荐

牛客5655:其他公司的面试(事)吗
点赞 评论 收藏
分享
努力学习的小绵羊:我反倒觉得这种挺好的,给不到我想要的就别浪费大家时间了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务