字符串转换为int

public static int strToInt(String str) {
        char[] s = str.trim().toCharArray();
        int len = s.length;
        // 去除空格后长度为0则返回0
        if (len == 0)
            return 0;
        int sign = 1;
        int i = 0;
        int currNum = 0;
        // 确定符号
        if (s[i] == '-') {
            sign = -1;
            i++;
        } else if (s[i] == '+')
            i++;
        // 对连续数字进行遍历
        while (i < len && isDigit(s[i])) {
            // 当前位置对应的数字
            int k = sign * (s[i] - '0');
            // 判断ans如果加上当前位的数字是否超出范围
            // 此处不能计算出新的ans再比较,因为计算出的新的ans可能已经超出范围了
            if (sign > 0 && currNum > (Integer.MAX_VALUE - k) / 10)
                return Integer.MAX_VALUE;
            if (sign < 0 && currNum < (Integer.MIN_VALUE - k) / 10)
                return Integer.MIN_VALUE;
            // 加入当前位的数字
            currNum = currNum * 10 + k;
            i++;
        }
        return currNum;
    }

    public static boolean isDigit(char c) {
        return c - '0' >= 0 && c - '9' <= 0;
    }

 

   char strAry[] = str.trim().toCharArray();
        if (strAry.length == 0) {
            return 0;
        }
        int len = strAry.length;
        int i = 0;
        int retNum = 0;
        int sign = 1;//符号位正数
        if (strAry[0] == '-') {
            sign = -1;
            i++;
        }

        for (; i < len; i++) {//是数字才能转换
            if (strAry[i] - '0' >= 0 && '9' - strAry[i] >= 0) {
                int currNum = sign * (strAry[i] - '0');//转换为数字
                if (retNum > 0 && (retNum > (Integer.MAX_VALUE - currNum) / 10)) {
                    return Integer.MAX_VALUE;
                }

                if (retNum < 0 && (retNum < (Integer.MIN_VALUE - currNum) / 10)) {
                    return Integer.MIN_VALUE;
                }

                retNum = retNum * 10 + currNum;
            }
        }
        return retNum;

 

posted @ 2020-08-29 13:33  soft.push("zzq")  Views(148)  Comments(0Edit  收藏  举报