StringBuffer str = new StringBuffer(s.trim());
if(str.length()==0) return 0;//长度为0直接返回0
/*
Character.isDigit 判断是不是数字。
如果开头既不是数字,又不是 ‘-’ ‘+’ 那就是字母等,直接返回0
*/
if ((!Character.isDigit(str.charAt(0))) &&
str.charAt(0) != '-' && str.charAt(0) != '+' ) return 0;
long ans = 0l;
boolean neg = (str.charAt(0) == '-'); //如果开头是 - ,那么返回true 用来记录正负数
int i = !Character.isDigit(str.charAt(0))? 1:0;//如果开头是符号 那就从下标1开始
//如果 i < 字符串的长度 并且 是一个整数 ,才进入循环
while ( i < str.length() && Character.isDigit(str.charAt(i))){
ans = ans * 10 + (str.charAt(i++) - '0');
//如果 是正数 并且大于Integer的最大值
if (!neg && ans > Integer.MAX_VALUE){
ans = Integer.MAX_VALUE;
break;
}//如果 是负数 并且大于 Integer的最大值 + 1
else if (neg && ans > 1l + Integer.MAX_VALUE){
ans = 1l + Integer.MAX_VALUE; //这里赋值 为 负数的最大值 之后改变符号即可
break;
}
}
return neg?(int) -ans:(int) ans;//如果neg 是true 说明是负数返回 -ans
LeetCode第8题字符串转换整数
最新推荐文章于 2023-03-13 15:04:27 发布