把字符串转换为整数
题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
分析
-
对于一个数字的字符形式,将其减去
0
,肯定在0-9之间。可以借此遍历,再判断正负即可。 -
也可以使用正则判断。
实现
实现1
public int StrToInt(String str) {
str = str.trim();
if(str == null || str.length() == 0)
return 0;
boolean positive = true;
int i = 0, res = 0;
int num;
if(str.charAt(0) == '+')
{
i++;
}else if(str.charAt(0) == '-')
{
positive = false;
i++;
}
for(; i < str.length(); i++)
{
num = str.charAt(i) - '0';
if(num < 0 || num > 9) return 0;
if(positive)
{
if(res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && num > Integer.MAX_VALUE % 10) ) return 0;
res = res * 10 + num;
}
else
{
if(res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE / 10 && -num < Integer.MIN_VALUE % 10) ) return 0;
res = res * 10 - num;
}
}
return res;
}
实现2
public int StrToInt(String str) {
// \d代表[0-9] 但是要写成\\d才行。
if(!str.matches("[1-9,+,-]\\d+")) return 0;
int len = str.length();
int i = len-1;
//long类型,避免溢出。
long res = 0;
while(i>=0&&str.charAt(i)>='0'&&str.charAt(i)<='9'){
res += Math.pow(10,len-1-i)*(str.charAt(i)-'0');
i--;
}
res = (str.charAt(0) == '-' ? -res : res);
// 溢出就返回0,用long类型的res来比较,
if(res>Integer.MAX_VALUE|| res<Integer.MIN_VALUE)return 0;
return (int)res;
}