Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static long parseLong(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");
- }
- boolean negative = false;
- int i = 0, len = s.length();
- long limit = -Long.MAX_VALUE;
- if (len > 0) {
- char firstChar = s.charAt(0);
- if (firstChar < '0') { // Possible leading "+" or "-"
- if (firstChar == '-') {
- negative = true;
- limit = Long.MIN_VALUE;
- } else if (firstChar != '+') {
- throw NumberFormatException.forInputString(s);
- }
- if (len == 1) { // Cannot have lone "+" or "-"
- throw NumberFormatException.forInputString(s);
- }
- i++;
- }
- long multmin = limit / radix;
- long result = 0;
- while (i < len) {
- // Accumulating negatively avoids surprises near MAX_VALUE
- int digit = Character.digit(s.charAt(i++),radix);
- if (digit < 0 || result < multmin) {
- throw NumberFormatException.forInputString(s);
- }
- result *= radix;
- if (result < limit + digit) {
- throw NumberFormatException.forInputString(s);
- }
- result -= digit;
- }
- return negative ? result : -result;
- } else {
- throw NumberFormatException.forInputString(s);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement