题目:
请写一个函数strToInt,实现把字符串转换成整数这个功能。不能使用自带的函数。
分析:
需要注意的点:
- 输入是null或者空字符串或者不能转换成整数的一些乱码
- 输入了负数要考虑在内
- 输入了字符串转换成数字的溢出
解法:
package com.wsy;
public class Main {
public static void main(String[] args) {
System.out.println(strToInt(null));
System.out.println(strToInt(""));
System.out.println(strToInt("abcdefg"));
System.out.println(strToInt("+123"));
System.out.println(strToInt("-123"));
System.out.println(strToInt("2147483647"));
System.out.println(strToInt("2147483648"));
System.out.println(strToInt("-2147483648"));
System.out.println(strToInt("-2147483649"));
}
public static int strToInt(String string) {
long result = 0;
int negative = 0;
if (string == null || string.trim().equals("")) {
System.out.print("\"" + string + "\" can't to int\t\t");
} else {
char[] chars = string.toCharArray();
int length = chars.length;
if (chars[0] == '+') {
negative = +1;
}
if (chars[0] == '-') {
negative = -1;
}
for (int i = (negative == 0 ? 0 : 1); i < length; i++) {
if (chars[i] < '0' || chars[i] > '9') {
result = 0;
System.out.print("\"" + string + "\" can't to int\t\t");
break;
} else {
result = result * 10 + (chars[i] - '0');
if ((negative == 0 || negative == 1) && (result > Integer.MAX_VALUE)) {
result = 0;
System.out.print("\"" + string + "\" 上溢出\t\t");
break;
}
if (negative == -1 && negative * result < Integer.MIN_VALUE) {
result = 0;
System.out.print("\"" + string + "\" 下溢出\t\t");
break;
}
}
}
if (negative != 0) {
result *= negative;
}
}
return (int) result;
}
}