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))
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 tipoNumberFormatException
si ocurre alguna de las siguientes situaciones:
- El primer argumento es
null
o es una cadena de longitud cero. FALSO: "howareyou" no esnull
y tiene una longitud superior a 0- El radix es más pequeño que
Character.MIN_RADIX
o más grande queCharacter.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 unint
.
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));