题目描述
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
主要体现在审题。
- 字符串只允许出现正负号,数字。所以 入口要判断
- 入口判空
- 是否越界判断
public static int StrToInt(String str) {
//字符串是否为空
//是否有非数字字符
//是否+-开头
//是否越界
int flag = 1;
long number = 0;//todo 如果用int 会都不到判断溢出逻辑就溢出了
if (null == str || "".equals(str)) {
return 0;
}
char[] chars = str.toCharArray();
if (chars[0] == '-') {
flag = -1;
}
for (int i = (chars[0] == '-' || chars[0] == '+') ? 1 : 0; i < chars.length; i++) {
if (chars[i] > '9' || chars[i] < '0') {
return 0;
} else {
number = number * 10 + chars[i] - '0';
}
}
if ((flag == 1 && number > Integer.MAX_VALUE) || (flag == -1 && number < Integer.MIN_VALUE)) {
return 0;
}
return (int) (flag * number);
}
复制代码
转载于:https://juejin.im/post/5cf6336bf265da1b9570439f