in src/main/java/org/apache/commons/lang3/math/NumberUtils.java [185:215]
public static BigInteger createBigInteger(final String str) {
if (str == null) {
return null;
}
if (str.isEmpty()) {
throw new NumberFormatException("An empty string is not a valid number");
}
int pos = 0; // offset within string
int radix = 10;
boolean negate = false; // need to negate later?
final char char0 = str.charAt(0);
if (char0 == '-') {
negate = true;
pos = 1;
} else if (char0 == '+') {
pos = 1;
}
if (str.startsWith("0x", pos) || str.startsWith("0X", pos)) { // hex
radix = 16;
pos += 2;
} else if (str.startsWith("#", pos)) { // alternative hex (allowed by Long/Integer)
radix = 16;
pos++;
} else if (str.startsWith("0", pos) && str.length() > pos + 1) { // octal; so long as there are additional digits
radix = 8;
pos++;
} // default is to treat as decimal
final BigInteger value = new BigInteger(str.substring(pos), radix);
return negate ? value.negate() : value;
}