将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
先判断是正数还是负数,再判断是否会产生越界。
public class Solution {
public int StrToInt(String str) {
if(str == null)return 0;
int res = 0;
boolean negative = false;//判断是否为负数
int limit = -Integer.MAX_VALUE;
int mulimit = 0;
int i = 0;
int digit = 0;
if(str.length()>0){
char ca = str.charAt(0);
if(ca < '0'){//判断第一个位字符是否为正负号
if(ca == '-'){
negative = true;//设定结果为负数
limit = Integer.MIN_VALUE;
}
else if(ca != '+'){
return 0;
}
if(str.length() == 1)return 0;
i++;
}
mulimit = limit/10;
while(i<str.length()){
digit = str.charAt(i++)-'0';//任何字符-'0'为该字符的int类型绝对值
if(digit<0||digit>9){
return 0;
}
if(res < mulimit){
return 0;
}
res *= 10;
if(res < limit+digit){
return 0;
}
res -= digit;//因为为负数,所以用减法
}
}
else{
return 0;
}
return negative==true?res:-res;//判断是否为负数,若是则直接返回true,否则取反
}
}