题目: 字符串转换整数 (atoi)

来自智得网
跳转至: 导航、​ 搜索

分析

过滤前面所有的空白字符,如果所有字符都是空白字符返回0。

获取到第一个非空字符,如果是“+”、“-”、或者数字的时候继续,否则则直接返回0,将正号或者负号存储在符号位,如果第一位是数字则记录这一轮的结果为该数字,否则这一轮的结果记为0。

继续向后遍历,如果后续的字符仍然是数字,则使用上一轮的结果乘以10加上当前的数字作为本轮的结果。

重复上一轮的循环,直到发现第一个非数字的字符或者遍历结束,返回结果。

在循环过程中,如果出现溢出,则直接返回溢出之前的结果。

题解

public int StrToInt(String str) {
    if (str == null || str.length() == 0)
        return 0;
    boolean isNegative = str.charAt(0) == '-';
    int ret = 0;
    for (int i = 0; i < str.length(); i++) {
        char c = str.charAt(i);
        if (i == 0 && (c == '+' || c == '-'))
            continue;
        if (c < '0' || c > '9')
            return 0;
        ret = ret * 10 + (c - '0');
    }
    return isNegative ? -ret : ret;
}