思考:本题的难点体现在对各种情况能否全部覆盖,已经对细节的把握上。
可能出现的各种特殊情况:
1.null or empty input
2.+& -
3.white space
4.max and min of integer
public class atoi {
public int luoAtoi(String str){
if(str==null){
return 0;
}
str = str.trim();
if(str.length()==0){
return 0;
}
long result = 0;
int flag = 1; //标记正负
int i = 0; //索引
if(str.charAt(i) == '+'){
i++;
}
else if(str.charAt(i) == '-'){
i++;
flag = -1;
}
for(;i<str.length();i++){
if((str.charAt(i)<'0')||(str.charAt(i)>'9')){
break;
}
else{
result = result*10 + (str.charAt(i) - '0');
}
if(result>Integer.MAX_VALUE){
break;
}
}
result = result*flag;
if(result >= Integer.MAX_VALUE){
return Integer.MAX_VALUE;
}
if(result <= Integer.MIN_VALUE){
return Integer.MIN_VALUE;
}
return (int)result;
}
}
细节点:
1.返回的result变量需要是long型,满足String的值可能已经大于Integer的最大值,不然就会取负。
2.char类型相减:因为char类型实际上是ASCII码对应的整数,所以取与'0'的差与10进制整数符合。
3.一旦result大于Integer最大值,需要跳出循环,不然可能导致String的值大于long型的最大值。
4.最后记得把result强转为int型