2010-08-18 31 views
7

He escrito una función para convertir una cadena a un enterono pudo convertir una cadena a entero en Java

if (data != null) 
    { 
     int theValue = Integer.parseInt(data.trim(), 16); 
     return theValue; 
    } 
    else 
     return null; 

tengo una cadena que es 6042076399 y me dio errores:

Exception in thread "main" java.lang.NumberFormatException: For input string: "6042076399" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) 
    at java.lang.Integer.parseInt(Integer.java:461) 

No es esto la forma correcta de convertir cadena a entero?

+0

Tenga en cuenta que al especificar 16 como el segundo parámetro para 'parseInt', está analizando la cadena como un número hexadecimal. – Jesper

Respuesta

7

Aquí es la manera que prefiero hacerlo:

edición (08/04/2015):

Como se señaló en el comentario anterior, esto es en realidad mejor hacerlo de esta manera:

String numStr = "123"; 
int num = Integer.parseInt(numStr); 
+0

A menos que las cosas hayan cambiado, 'Integer.parseInt()' es el método preferido ya que almacenará en caché los valores comúnmente utilizados para mejorar el rendimiento. Crear un nuevo Entero siempre creará un nuevo objeto Entero. Sin embargo, esto fue pre-Java 5 - No me sorprendería que ambos hagan lo mismo ahora. –

2

Esa cadena es mayor que Integer.MAX_VALUE. No puede analizar algo que está fuera del rango de números enteros. (Suben a 2^31-1, creo).

4

Ese es el método correcto, pero su valor es mayor que el tamaño máximo de int.

El tamaño máximo que puede contener un int es 2 - 1, o 2,147,483,647. Su valor es 6,042,076,399. Debería buscar almacenarlo como long si quiere un tipo primitivo. El valor máximo de una longitud es significativamente mayor: 2 - 1. Otra opción podría ser BigInteger.

8

Un Integer no puede contener ese valor. 6042076399 (413424640921 en decimal) es mayor que 2147483647, el máximo que un entero puede contener.

Intente usar Long.parseLong.

+1

Está usando tipos primitivos. Yo recomendaría un 'largo' antes de un' Largo'. Posiblemente también recomendaría un 'BigInteger' antes de un' Long', aunque no estoy del todo seguro de eso. –

1

Además de lo que respondieron los demás, si tiene una cadena de más de 8 dígitos hexadecimales (pero hasta 16 dígitos hexadecimales), puede convertirla a una larga utilizando Long.parseLong() en lugar de a una int usando Integer.parseInt().

Cuestiones relacionadas