题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
+2147483647
1a33
输出
2147483647
0
方法一:理解的不是很深刻,记住这个判断是否溢出。这里有个判断溢出的程序:范围是-2147483648 和 2147483647
import java.util.*;
import java.math.BigInteger;
class Solution {
public int strToInt(String str) {
char[] c = str.trim().toCharArray();
if (c.length == 0) return 0;
int res = 0, bndry = Integer.MAX_VALUE / 10;
int i = 1, sign = 1;
if (c[0] == '-') sign = -1;
else if (c[0] != '+') i = 0;
for (int j = i; j < c.length; j++) {
if (c[j] < '0' || c[j] > '9')
break;
if (res > bndry || res == bndry && c[j] > '7')
return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
res = res * 10 + (c[j] - '0');
}
return sign * res;
}
}
public class Main {
public static void main(String[] args) {
String nums = "+2147483687";
Solution p = new Solution();
int b = p.strToInt(nums);
System.out.println("结果:" + b);
}
}
方法二:投机取巧的方法
public class Solution {
public int StrToInt(String str) {
int res = 0;
try {
res = Integer.parseInt(str);
} catch (Exception e) {
} finally {
return res;
}
}
}
或者:
public class Solution {
public int StrToInt(String str) {
Integer res=0;
try {
res = new Integer(str);
} catch (NumberFormatException e) {
} finally {
return res;
}
}
}