字符串转整数
- 字符串开头可能有很多空格,忽略之,直到找到第一个不是空格的字符。
- 第一个非空格字符可能是加号,减号,表示正数或负数。
- 继续向后碰到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);
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。