面试题67:把字符串转换成整数

1、题目描述:写一个函数,实现将字符串转换成整数的功能,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。

2、思路:这道题首先要想出具体该怎么做,然后再考虑非法输入。

  首先这道题需要纠结的一点就是输入字符串的首字符可能是“+”、“-”、“数字”,这三种情况是不一样的,若首字符是正负号,计算的时候就要特殊处理。首字符是数字,即正数省略符号。考虑好这个其余的计算就是按位去遍历字符串,然后每遍历一位就乘以10,然后加上上一位。即可。最后再考虑非法输入:

非法输入要考虑全,这道题思路不难,单纯就是为了考察一个人编程的习惯,是否对代码的鲁邦性有过深入的思考,避免在实际工作中经常性的写bug:

(1)字符串可能为null或者为“”,若不判断,程序数组为越界。

(2)字符串的前后可能存在空格,若不去掉,也会报错。

(3)字符串首字符,到底是+,-,数字

(4)字符串里面字符不是数字,直接非法返回0.

(5)字符串转换之后超出 int 范围,这样会报错。

3、代码:

扫描二维码关注公众号,回复: 8722533 查看本文章
public class Solution {
    public int StrToInt(String str) {
        if (str == null || str.length() == 0) {
            return 0;
        }
 
        str = str.trim();
        if (str.length() == 0) {
            return 0;
        }
 
        boolean flag = false;
        long result = 0;
        char firstChar = str.charAt(0);
        if (firstChar == '+') {
            flag = false;
        } else if (firstChar == '-') {
            flag = true;
        } else if (firstChar >= '0' && firstChar <= '9') {
            result = firstChar - '0';
        }
        for (int i = 1; i < str.length(); i++) {
            char ch = str.charAt(i);
            if (ch >= '0' && ch <= '9') {
                result *= 10;
                result += ch - '0';
            } else {
                return 0;
            }
        }
        if (flag) {
            result = -result;
        }
        if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) {
            return 0;
        }
 
        return (int) result;
    }
 
}

猜你喜欢

转载自www.cnblogs.com/guoyu1/p/12216768.html
今日推荐