代码如下:
public class Problem_05_ConvertStringToInteger {public static int convert(String str) {if (str == null || str.equals("")) {return 0; // can not convert}char[] chas = str.toCharArray();if (!isValid(chas)) {return 0; // can not convert}boolean posi = chas[0] == '-' ? false : true;int minq = Integer.MIN_VALUE / 10;int minr = Integer.MIN_VALUE % 10;int res = 0;int cur = 0;for (int i = posi ? 0 : 1; i < chas.length; i++) {cur = '0' - chas[i];if ((res < minq) || (res == minq && cur < minr)) {return 0; // can not convert}res = res * 10 + cur;}if (posi && res == Integer.MIN_VALUE) {return 0; // can not convert}return posi ? -res : res;}public static boolean isValid(char[] chas) {if (chas[0] != '-' && (chas[0] < '0' || chas[0] > '9')) {return false;}if (chas[0] == '-' && (chas.length == 1 || chas[1] == '0')) {return false;}if (chas[0] == '0' && chas.length > 1) {return false;}for (int i = 1; i < chas.length; i++) {if (chas[i] < '0' || chas[i] > '9') {return false;}}return true;}public static void main(String[] args) {String test1 = "2147483647"; // max in javaSystem.out.println(convert(test1));String test2 = "-2147483648"; // min in javaSystem.out.println(convert(test2));String test3 = "2147483648"; // overflowSystem.out.println(convert(test3));String test4 = "-2147483649"; // overflowSystem.out.println(convert(test4));String test5 = "-123";System.out.println(convert(test5));}}
参考资料: 程序员代码面试指南 -- 左程云