题目
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
解题,本题大意是将字符串转化为整数,听着很简单,但是其中有诸多的坑。
首先,需要判断输入的是否合法,如果不合法直接返回0。
第二,需要判断一个字符代表的是正数还是负数。
第三,防止整数的越界。整数的范围为(-2^31, 2^31-1)
public class Solution {
public int StrToInt(String str) {
if(str == null || str.length() == 0){
return 0;
}
// 默认是正数
boolean positive = true;
int len = str.length();
int i = 0;
// 标记第一个字符是否是正负号,并且标记正负性
if(str.charAt(i) == '-'){
positive = false;
i++;
}else if(str.charAt(i) == '+'){
i++;
}
long result = 0L;
while(i < len){
if(str.charAt(i)>= '0' && str.charAt(i)<='9'){
result = result * 10 + (str.charAt(i)-'0');
i++;
}else{
result = 0;
break;
}
}
// 判断是否越界,如果越界直接返回0
if((positive&&result>Integer.MAX_VALUE) || (!positive&&(0-result)<Integer.MIN_VALUE)){
return 0;
}
if(!positive){
result = 0 - result;
}
return (int)result;
}
}