在实现Atoi function(一个将字符串转换为int型的方法)的时候,由于一个int型数据是用32 bit大小的内存存储,因此一个int型数据的范围为 -2147483648~2147483647,当将处理好的字符串由Integer.parseInt()转换为int型时,数据可能会出现溢出,导致结果错误。这个问题的修改办法可以是用抛出异常的方法来解决,如下try代码所示,将num = Integer.parseInt(s)语句放入try方法中来。接着在catch中来处理。
public static int myAtoi(String str) {
if(str.isEmpty())return 0;
String string = "1234567890";
String s = "";
int num = 0;
while(str.charAt(0) == ' '){
str = str.substring(1);
}
if("-+".contains(String.valueOf(str.charAt(0)))){
s += str.charAt(0);
str = str.substring(1);
}
for(int i = 0; i < str.length(); i++){
if(string.contains(String.valueOf(str.charAt(i)))){
s += str.charAt(i);
}else break;
}
try {
num = Integer.parseInt(s);
} catch (Exception e) {
if(s.length() > 2){
if(Integer.parseInt(s.substring(0,2)) < 0){
return -2147483648;
}else {return 2147483647;}
}else return 0;
}
return num;
}