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
NumberFormatExceptionuna excepción de tipoNumberFormatExceptionsi ocurre alguna de las siguientes situaciones:
- El primer argumento es
nullo es una cadena de longitud cero. FALSO: "howareyou" no esnully tiene una longitud superior a 0- El radix es más pequeño que
Character.MIN_RADIXo 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));