题目描述
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
解题思路
首先判断第一位数字是不是符号,然后计算每一位的值,同时要考虑溢出的情况(分为正数的溢出和负数的溢出)
代码
public static int StrToInt(String str) {
if(str.trim().length() == 0){
return 0;
}
int flag = 1;//无符号和符号位为+
char firstChar = str.charAt(0);
if(firstChar == '+' || firstChar == '-'){ //有符号
if(firstChar == '-') flag = -1;
str = str.substring(1);//去掉符号 算法可以简单一些
}else if(firstChar >'9' || firstChar<'0'){ //不是数字
return 0;
}
char [] array = str.toCharArray();
int numberLength = array.length;
Integer number = 0;
for (int i = numberLength -1; i >=0; i--) {
//是数字
if(array[i]>='0' && array[i]<='9'){
//分别计算 个位->十位->百位->...
int newValue = (array[i] -'0') * (int)Math.pow(10,numberLength - i -1);
number += flag * newValue;
//如果符号是+,计算的结果<0,溢出;如果符号是-,计算的结果>0,溢出
if((flag == 1 && number<0) || (flag == -1 && number >0))
return 0;
}else{
return 0;
}
}
return number;
}