题目: 字符串转换整数 (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;
}