题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
+2147483647 1a33
输出
2147483647 0
/*
1.字符串为空
2.只有一个正负号
3.整数上下溢出
*/
public class Solution {
boolean isValid = false;
public int StrToInt(String str) {
if(str == null || str.length() == 0)
return 0;
char[] chars = str.toCharArray();
int num = 0;
boolean minus = false;
int i = 0;
//判断正负号
if(chars[i] == '+'){
i++;
}else if(chars[i] == '-'){
i++;
minus = true;
}
//考虑只有正负号的情况,应该输出0
if(i < chars.length){
num = StrToIntCore(chars,minus,i);
}
return num;
}
public int StrToIntCore(char[] chars,boolean minus,int i){
int num = 0;
int j = i;
for(; j < chars.length; j++){
if(chars[j] > '0' && chars[j] < '9'){
int flag = minus? -1 : 1;
num = 10*num + flag * (chars[j] - '0');
//整数上下溢出
if((!minus&&num>Integer.MAX_VALUE)||(minus&&num<Integer.MIN_VALUE)){
num=0;
break;
}
}else{
num = 0;
break;
}
}
if(j == chars.length){
isValid = true;
}
return num;
}
}