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;