67.把字符串转化成整数(中等)

2020-03-04  本文已影响0人  今天柚稚了么

题目描述:

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0

思路:正则表达式判断格式 + 结果溢出判断

不符合规则就返回0;符合规则,得出结果后判断是否溢出。
转自https://blog.nowcoder.net/n/7ecd980e86d34ebcaa069c97efe4288c?f=comment

public class Solution {
    public int StrToInt(String str) {
         //\d*表示0个或多个0到9的数字
        if(!(str.matches("[+,-]\\d+") || str.matches("[1-9]\\d*")))
            return 0;
        int len = str.length();
        int i = len-1;
        long res = 0;  //long类型,避免溢出。不能用int
 
        while(i>=0&&str.charAt(i)>='0'&&str.charAt(i)<='9'){
            res += Math.pow(10,len-1-i)*(str.charAt(i)-'0');
            i--;
        }
        res = (str.charAt(0) == '-' ? -res : res);
        //溢出就返回0,用long类型的res来比较,
        //如果定义为int res,那再比较就没有意义了,int范围为[-2147483648,2147483647]
        if(res>Integer.MAX_VALUE|| res<Integer.MIN_VALUE)
            return 0;
        return (int)res;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读