本文共 2516 字,大约阅读时间需要 8 分钟。
- public static int parseInt(String s, int radix)
- throws NumberFormatException
- {
-
-
-
-
-
-
- if (s == null) {
- throw new NumberFormatException("null");
- }
-
- if (radix < Character.MIN_RADIX) {
- throw new NumberFormatException("radix " + radix +
- " less than Character.MIN_RADIX");
- }
-
- if (radix > Character.MAX_RADIX) {
- throw new NumberFormatException("radix " + radix +
- " greater than Character.MAX_RADIX");
- }
-
- int result = 0;
-
-
-
- boolean negative = false;
- int i = 0, len = s.length();
-
-
-
-
-
- int limit = -Integer.MAX_VALUE;
-
- int multmin;
- int digit;
-
- if (len > 0) {
- char firstChar = s.charAt(0);
- if (firstChar < '0') {
- if (firstChar == '-') {
- negative = true;
-
-
- limit = Integer.MIN_VALUE;
-
- } else if (firstChar != '+')
- throw NumberFormatException.forInputString(s);
-
- if (len == 1)
- throw NumberFormatException.forInputString(s);
- i++;
- }
-
- multmin = limit / radix;
-
-
-
-
-
-
-
-
-
-
- while (i < len) {
-
- digit = Character.digit(s.charAt(i++),radix);
- if (digit < 0) {
- throw NumberFormatException.forInputString(s);
- }
-
-
-
-
- if (result < multmin) {
- throw NumberFormatException.forInputString(s);
- }
-
-
-
- result *= radix;
-
-
-
-
- if (result < limit + digit) {
-
- throw NumberFormatException.forInputString(s);
- }
- result -= digit;
- }
- } else {
- throw NumberFormatException.forInputString(s);
- }
- return negative ? result : -result;
- }
注 :转换成负数来计算的主要原因是防止溢出,
8位的正负数范围是 -128 ~ 127 所以,正数转换成负数不会溢出,最小负数转换成正数会溢出
转载地址:http://sgalf.baihongyu.com/