class Solution {
public int myAtoi(String s) {
StringBuilder stringBuilder = new StringBuilder();
int n = 0;
boolean flag = false;
if(s.length()==0)return 0;//如果字符串为空串
while(n<s.length()&&s.charAt(n)==' ')n++;//去除前导空格,n<s.length()需要写在前面,否则会出现范围超出的问题,如“ ”这种情况
if(n==s.length())return 0;//字符串全是空格
for(int i=n;i<s.length();i++) {
if(s.charAt(n)=='-'&&i==n){//负数的情况
flag = true;
i++;
if(i==s.length())return 0;//“-”
}
if(s.charAt(n)=='+'&&i==n){
i++;
if(i==s.length())return 0;“+”
}
if(s.charAt(i)>='0'&&s.charAt(i)<='9'){
stringBuilder.append(s.charAt(i));
}else{
break;
}
}
if(stringBuilder.length()==0)return 0;//未出现数字
String str = stringBuilder.toString();
int ans = 0;
for(int i=0;i<str.length();i++){
if(ans > ((Integer.MAX_VALUE-(str.charAt(i)-'0'))/10)) {//出界的情况,判断时也不能出界
return flag ? Integer.MIN_VALUE : Integer.MAX_VALUE;
}
ans = 10 * ans + (str.charAt(i)-'0');
}
return flag?-ans:ans;
}
}