题目描述
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
+2147483647
1a33
输出
2147483647
0
本题主要考察对异常输入的考虑是否全面
注意细节:
1)输入只有正负号的情况,区分正负数和0。
2)特殊输入:空字符串的情况,输入非数字字符串的情况。
3)边界值:最大正整数和最小负整数溢出的情况。
实现:判断是否会溢出时,通过long来判断。
public int StrToInt(String str) {
String str2=str.trim();
if(str2==null||str2.length()==0){
return 0;
}
char[] chars=str2.toCharArray();
int symbol=1;
if(chars[0]=='-'){
symbol=-1;
}
long sum=0;
for (int i =(chars[0]=='+'||chars[0]=='-')?1:0; i < chars.length; i++) {
if(chars[i]<'0'||chars[i]>'9'){
return 0;
}else{
sum=sum*10+chars[i]-'0';
}
if((symbol==1 &&sum>Integer.MAX_VALUE)||(symbol==-1&&sum<Integer.MIN_VALUE)){
sum=0;
break;
}
}
return (int) ((sum)*symbol);
}