①首先判断正负号问题;
②遍历字符串中的每一个字符,将其转化成数字;
③考虑int溢出问题(重要);
④得到最终的结果,带上正负号;
溢出判断1:
public int Strtoint(String str){
//判断输入是否合法,不合法返回0
if(str == null || str.trim().length() == 0){
//必须先判断str==null
return 0;
}
//去除首尾空格转换为字符数组
char[] arrstr = str.trim().toCharArray();
//判断首字符区分转换后的数据的正负
//symbol初始值必须为1,因为可能正数没有带‘+’号
int symbol = 1,start = 0;
if (arrstr[0] == '+'){
symbol = 1;
start=1;
}
if (arrstr[0] == '-'){
symbol = -1;
start=1;
}
int re = 0;
//遍历字符数组(除去首字符)转换为数字
for (int i =start; i < arrstr.length;i++){
//如果字符转换成数字不再0-9之间则不合法返回0
if(arrstr[i]<'0'||arrstr[i]>'9'){
return 0;
}
//需要判断此时的数据是否溢出,如果溢出返回0
int tmp = re*10 +(int)(arrstr[i]-'0');
//如果溢出则tmp值不等于re*10 +(int)(arrstr[i]-'0')
if((tmp-(int)(arrstr[i]-'0'))/10 !=re)
return 0;
//将字符转化成数字
re = re*10+(int)(arrstr[i]-'0');
}
return symbol*re;
}
溢出判断2:
public int StrToInt(String str) {
if (str == null || str.trim().length() == 0)
return 0;
char[] arrstr = str.trim().toCharArray();
//判断符号
int sign = 1,start = 0;
if (arrstr[0] == '-'){
sign = -1;
start = 1;
}
if (arrstr[0] == '+'){
sign = 1;
start = 1;
}
long re = 0;
for (int i = start; i < arrstr.length; i++ ){
//如果字符不在数字范围内,则返回0
if(arrstr[i] < '0' || arrstr[i] > '9')
return 0;
//当前数字时tmp,判断是否溢出
/*int tmp = re*10+(int)(arrstr[i]-'0');
if ((tmp - (int)(arrstr[i]-'0'))/10 != re)
return 0;*/
re = re*10+(int)(arrstr[i]-'0');
//注意考虑大于最大值时字符串转化后为正数,小于最小值时字符串转化后为负数
if ((sign == 1&&re > Integer.MAX_VALUE)|| ( sign == -1)&&re < Integer.MIN_VALUE)
return 0;
}
return (int)(sign*re);
}