字符串转整数

  • 字符串开头可能有很多空格,忽略之,直到找到第一个不是空格的字符。
  • 第一个非空格字符可能是加号,减号,表示正数或负数。
  • 继续向后碰到0-9就解析,碰到其他字符就终止。
  • 若第一段连续数字为空,返回0.
  • 如果整数大于Integer.MAX_VALUE,返回MAX_VALUE;若小于Integer.MIN_VALUE,返回MIN_VALUE。
    public int myAtoi(String str) {
        if (str == null || str.length() == 0) return 0;
        int len = str.length();
        double res = 0; // 此处用double,防止数字太大溢出
        boolean flag = false; // 标记+/-
        int i = 0; // 索引
        while (i < len && str.charAt(i) == ' ') i++;//直到找到第一个非空格字符
        if (i >= len) return 0;//如果去掉空格后没字符了,就返回0
        char c = str.charAt(i);
        if (c == '+') {
            flag = true; // 标记为正数,继续后移i
            i++;
        } else if (c == '-') { // 标记为负数,继续后移i
            flag = false;
            i++;
        } else if (c >= '0' && c <= '9') {
            flag = true; // 如果是数字,则标记为正数,i不用移动了
        } else {
            return 0; // 非法
        }
        // 从i开始计算
        for (int k = i; k < len; k++) {
            char cur = str.charAt(k);
            if (cur < '0' || cur > '9') break;
            res = res * 10 + (cur - '0');
        }
        // 正数,且res大于MAX_VALUE
        if (flag && res > Integer.MAX_VALUE) return Integer.MAX_VALUE;
        // 负数,且res小于MIN_VALUE
        if (!flag && res < Integer.MIN_VALUE) return Integer.MIN_VALUE;
        return (int) (flag ? res : -res);
    }

proheart
41 声望20 粉丝

Developer, Java & Android