Integer.parseInt (String str) java.lang.NumberFormatException: Errores [duplicado]

Resuelto Nitin Shukla asked hace 9 años • 0 respuestas

Sigo teniendo expectativas de formato de números, aunque estoy recortando las cadenas y no contienen caracteres no numéricos, curiosamente funciona para algunos números y no para otros. A continuación se muestra un ejemplo de una cadena para la que obtengo una excepción de formato numérico. Además, cualquier cadena que comience con 0, por ejemplo, "0208405223", se devuelve 208405223, ya no hay cero, ¿se supone que eso debe suceder?

String n="3020857508";
Integer a = Integer.parseInt(n.trim());
System.out.println(a);

Esta es la excepción:

Exception in thread "main" java.lang.NumberFormatException: For input string: "3020857508"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:583)
    at java.lang.Integer.parseInt(Integer.java:615)
    at JavaBeans.Main.main(Main.java:15)
Nitin Shukla avatar Aug 06 '15 11:08 Nitin Shukla
Aceptado

El número más grande que se puede analizar como an intes 2147483647(2 31 -1), y el más grande longes 9223372036854775807(2 63 -1), sólo aproximadamente el doble de largo.

Para analizar números arbitrariamente largos, utilice:

import java.math.BigInteger;

BigInteger number = new BigInteger(str);
Bohemian avatar Aug 06 '2015 04:08 Bohemian

Es porque 3020857508excede Integer.MAX_VALUE. Deberías usar longpara convertir la cadena a número.

java> String n="3020857508";
//=> java.lang.String n = "3020857508"
java> Integer a = Integer.parseInt(n.trim());
//=> java.lang.NumberFormatException: For input string: "3020857508"
java> Integer.MAX_VALUE
//=> java.lang.Integer res2 = 2147483647
java> Long a = Long.parseLong(n.trim());
//=>java.lang.Long a = 3020857508

Lo anterior es la salida de javarepl .

Si está utilizando JDK9 o superior, puede ver el mismo resultado en jshell.

jshell> String n="3020857508"
n ==> "3020857508"

jshell> Integer a = Integer.parseInt(n.trim())
|  Exception java.lang.NumberFormatException: For input string: "3020857508"
|        at NumberFormatException.forInputString (NumberFormatException.java:65)
|        at Integer.parseInt (Integer.java:652)
|        at Integer.parseInt (Integer.java:770)
|        at (#2:1)

jshell> Integer.MAX_VALUE
$3 ==> 2147483647

jshell> Long a = Long.parseLong(n.trim());
a ==> 3020857508
ntalbs avatar Aug 06 '2015 04:08 ntalbs

MAX_INT es 2147483647 y estás intentando analizar un número mayor como entero.

Puedes usar Long.parseLongen su lugar:

System.out.println(Long.parseLong("3020857508")); // 3020857508
Nir Alfasi avatar Aug 06 '2015 04:08 Nir Alfasi