总结一下可能的坑:
1、字符串前后端可能有空格;
2、空串
3、字符串首个字符可能是正负号;
4、字符串中间可能有‘0’ - ‘9’之外的非法字符,如果有的话,那么只将第一个出现的非法字符之前的数字串转换为数字;
5、溢出,有正数溢出和负数溢出,所以要注意
public static int atoi (String str) { // write code here if (str == null || str.length() == 0){ return 0; } String s = str.trim(); // 用于记录再字符串中非法字符出现之前的数字字符串的长度 // 如果第一位是符号位,则 int end = 0; for (int i = 0; i < s.length(); i++) { if (i == 0 && (s.charAt(i) == '-' || s.charAt(i) == '+')){ continue; } if (s.charAt(i) > '9' || s.charAt(i) < '0'){ end = i; break; } end = i + 1; } if (s.length() == 0 || end == 0){ return 0; } int val = 0; int n = s.length(); int flag = s.charAt(0) == '-' ? 1 : 0; for (int i = 0; i < n; i++) { if (i == 0 && (s.charAt(i) == '-' || s.charAt(i) == '+')){ continue; } if (s.charAt(i) <= '9' && s.charAt(i) >= '0'){ val += (s.charAt(i) - '0') * Math.pow(10,end - i -1); } } if (flag == 1 && val == Integer.MAX_VALUE){ return Integer.MIN_VALUE; } return flag == 1 ? -val : val; }