java radix

java - ¿Excepción de formato de número Integer.parseInt?



radix (7)

¿Podría ser que el número es> Integer.MAX_VALUE ? Si intento su código con Long lugar, funciona.

Siento que debo faltar algo simple, pero NumberFormatException una NumberFormatException en el siguiente código:

System.out.println(Integer.parseInt("howareyou",35))

Ideone

Puede convertir la cadena de yellow de la base 35, no entiendo por qué obtendría una NumberFormatException en esta cadena.


Como puede ver, se está quedando sin espacio en su Integer . Al cambiarlo por un Long , obtienes el resultado deseado. Aquí está el enlace IDEOne al código de trabajo .

Código

System.out.println(Integer.parseInt("YELLOW",35)); System.out.println(Long.parseLong("HOWAREYOU",35));


Desde los JavaDocs:

Se NumberFormatException una excepción de tipo NumberFormatException si ocurre alguna de las siguientes situaciones:

  • El primer argumento es null o es una cadena de longitud cero. FALSO: "howareyou" no es null y tiene una longitud superior a 0
  • El radix es más pequeño que Character.MIN_RADIX o más grande que Character.MAX_RADIX . FALSO: 35 está en rango [2,36]
  • Cualquier carácter de la cadena no es un dígito del radix especificado, excepto que el primer carácter puede ser un signo menos ''-'' (''/ u002D'') o un signo más ''+'' (''/ u002B'') siempre que la cadena sea más largo que la longitud 1. FALSO: todos los caracteres de "cómo estás" están en el rango de raíz [0, ''y'']
  • ==> El valor representado por la cadena no es un valor de tipo int . VERDADERO: El motivo de la excepción. El valor es demasiado grande para un int .

Se debe usar Long o BigInteger


El número está creciendo más que Integer.MAX_VALUE

Prueba esto:

System.out.println(Integer.parseInt("yellow", 35)); System.out.println(Long.parseLong("howareyou", 35));

Como se ve en los comentarios de René Link, está buscando algo como esto con un BigInteger :

BigInteger big=new BigInteger("abcdefghijklmno", 25);

Algo como esto:

System.out.println(Long.MAX_VALUE); System.out.println(new BigInteger("abcdefghijklmno",25));


El número producido es demasiado grande para un entero de Java, use un largo.


Las respuestas anteriores de parseLong serían correctas, pero en algún momento eso tampoco es lo suficientemente grande como para que la otra opción utilice un BigInteger.

Long.parseLong("howareyou", 35) new BigInteger("howareyou", 35)


Porque el resultado será mayor que Integer.MAX_VALUE

Prueba esto

System.out.println(Integer.parseInt("yellow", 35)); System.out.println(Long.parseLong("howareyou", 35));

y para

Long.parseLong("abcdefghijklmno",25)

necesitas BigInteger

Prueba esto y verás por qué

System.out.println(Long.MAX_VALUE); System.out.println(new BigInteger("abcdefghijklmno",25));