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;