题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
思路:若为负数,则输出负数,字符0对应48,9对应57,不在范围内则返回false。
注意:越界的问题(转换后的数字是否内存溢出)
package jianzhi_offer;
public class StrToInt2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "+214748364";
String str2 = "-9";
int i = strToInt(str);
System.out.println(i);
}
public static int strToInt(String str) {
if(str == null || str.length() == 0) {
return 0;
}
//num 的类型为long
long num = 0;
boolean tag = true;
char[] chars = str.toCharArray();
//字符只能用单引号,双引号的话会出错,字符串必须用双引号
if(chars[0] == '-') {
tag = false;
}
//如果第一位是正负号,从第二位开始循环
for(int i = (chars[0] == '+' || chars[0] == '-' ? 1:0);i<chars.length;++i) {
if(chars[i] >= '0' && chars[i] <= '9') {
num = num*10 +(chars[i] - '0');
}else {
num = 0;
break;
}
}
num = tag? num :(-num);
//判断转换后的数字是否超出内存
if(num > Integer.MAX_VALUE || num < Integer.MIN_VALUE) {
return 0;
}
return (int)num;
}
}