思路:
1.首先去掉字符串首尾的空格
2.判断字符串的长度
3.将其转换为字符数组
4.判断首字符是否为“-” “+” 并记录符号
5.判断是否能转换为数字,不能的话则返回sign * result
能转换则 result = result * 10 + digit;此时则需要判断result与Integer.MAX_VALUE的大小关系
需要注意的一点是 因为先进行求和操作,再判断其与Integer.MAX_VALUE的大小关系,如果result为int类型,则会导致溢出,从而产生错误的结果。因此一开始将result定义为double类型,但返回时则需进行强制转换。
class Solution { public int myAtoi(String str) { if (str == null) return 0; str = str.trim(); //去掉字符串首尾的空格 if (str.length() == 0) return 0; char[] chArray = str.toCharArray(); //toCharArray():将字符串对象中的字符转换为一个字符数组 int sign = 1; int i = 0; if (chArray[0] == '+') { sign = 1; i++; } else if (chArray[0] == '-') { sign = -1; i++; } double result = 0; //使用int会溢出 使用double则不会 while (i < chArray.length) { int digit = chArray[i] - '0'; if (digit < 0 || digit > 9) { return (int)(sign * result); } result = result * 10 + digit; if ((result >= Integer.MAX_VALUE && sign == 1) || (result >= Integer.MAX_VALUE + 1 && sign == 0)) { return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE; } i++; } return (int)(sign * result); } }