题目描述
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
+2147483647
1a33
输出
2147483647
0
解题思路:
思路清晰,只是需要考虑的细节比较多。
需要考虑前后空格,空输入,首字符为'+'或'-',字符串内是否包含非数字,转换后的数字是否溢出
public class Solution {
public int StrToInt(String str) {
if(str==null || str.trim().length()==0)
return 0;
str = str.trim();
boolean isNegative = false;
char firstChar = str.charAt(0);
//特殊处理'+'与'-'
if(firstChar == '+'){
str=str.substring(1);
}else if(firstChar == '-'){
str=str.substring(1);
isNegative = true;
}
//判断是否全为数字
for(int i=0; i<str.length(); i++){
if(!Character.isDigit(str.charAt(i)))
return 0;
}
return toDigit(str, isNegative);
}
private int toDigit(String str, boolean isNegative){
long res = 0;
int cnt = 1;
for(int i=str.length()-1; i>=0; i--){
int temp = str.charAt(i) - '0';
res += cnt*temp;
cnt *= 10;
}
if(isNegative)
res = -res;
//考虑溢出问题
if(res>Integer.MAX_VALUE || res<Integer.MIN_VALUE)
return 0;
return (int)res;
}
}