主要看如何处理正负号和循环处理字符串。
public static int parseInt(String string) throws NumberFormatException { return parseInt(string, 10); } public static int parseInt(String string, int radix) throws NumberFormatException { if (string == null || radix < Character.MIN_RADIX || radix > Character.MAX_RADIX) { // BEGIN android-changed throw new NumberFormatException("unable to parse '"+string+"' as integer"); // END android-changed } int length = string.length(), i = 0; if (length == 0) { // BEGIN android-changed throw new NumberFormatException("unable to parse '"+string+"' as integer"); // END android-changed } boolean negative = string.charAt(i) == '-'; if (negative && ++i == length) { // BEGIN android-changed throw new NumberFormatException("unable to parse '"+string+"' as integer"); // END android-changed } return parse(string, i, radix, negative); }
以上是两上重载方法,真正转换方法如下:
private static int parse(String string, int offset, int radix, boolean negative) throws NumberFormatException { int max = Integer.MIN_VALUE / radix; int result = 0, length = string.length(); while (offset < length) { int digit = Character.digit(string.charAt(offset++), radix); if (digit == -1) { // BEGIN android-changed throw new NumberFormatException("unable to parse '"+string+"' as integer"); // END android-changed } if (max > result) { // BEGIN android-changed throw new NumberFormatException("unable to parse '"+string+"' as integer"); // END android-changed } int next = result * radix - digit; if (next > result) { // BEGIN android-changed throw new NumberFormatException("unable to parse '"+string+"' as integer"); // END android-changed } result = next; } if (!negative) { result = -result; if (result < 0) { // BEGIN android-changed throw new NumberFormatException("unable to parse '"+string+"' as integer"); // END android-changed } } return result; }