题目
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
分析
其实这个不涉及到算法,主要是对输入的合法性的检查和转化过程中,是否越界或者溢出。
具体来说,有如下要求:
(1)输入是否为null
(2)输入字符串的长度是够为0
(3)输入的字符串的第一个字符是-、+或者没有正负号
(4)Java的正数的最大值是2^32 - 1,负数的最小值是2^31。
(5)每一个字符是否属于0-9之间。
综上分析:
代码
public int StrToInt(String str) {
// 字符串为空
if (str == null || str.length() == 0 || str.equals("")) {
return 0;
}
// 记录符号位,0是正数,1是负数,默认设置为正
int fuhao = 0;
int start = 0;
char [] chars = str.toCharArray();
if (chars[0] == '-') {// 带符号,符号是-
fuhao = 1;
start = 1;
}else if(chars[0]=='+'){// 带符号,符号是+
fuhao = 0;
start = 1;
}else {//不 带符号,默认为+
fuhao = 0;
start = 0;
}
long result = 0;
// 遍历数组,是数字的话就进行溢出校验,否则就输出0
for(int i = start;i<chars.length;i++){
char temp = chars[i];
if (temp >='0' && temp <= '9') {
result = result * 10 + temp -'0';
if ((fuhao == 0&&result > Integer.MAX_VALUE) || (fuhao == 1 &&result <Integer.MIN_VALUE)) {
return 0;
}
}else{
return 0;
}
}
return (int) (fuhao == 1?(int)(-1)*result : (int)result);
}