code: public static BigInteger createBigInteger(final String str) {
          if (str == null) {
              return null;
          }
          int pos = 0; // offset within string
          int radix = 10;
          boolean negate = false; // need to negate later?
          if (str.startsWith("-")) {
              negate = true;
              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;
      }
docs: <p>Convert a <code>String</code> to a <code>BigInteger</code>;
  since 3.2 it handles hex (0x or #) and octal (0) notations.</p>
  
  <p>Returns <code>null</code> if the string is <code>null</code>.</p>
  
  @param str  a <code>String</code> to convert, may be null
  @return converted <code>BigInteger</code> (or null if the input is null)
  @throws NumberFormatException if the value cannot be converted