2011-07-26 20 views
28

Estoy simplemente tratando de convertir una cadena que se genera desde un escáner de código de barras a un int para que pueda manipular tomando obtener el resto para generar un número determinado de enteros. Hasta ahora he intentado:Android: conversión de String a int

int myNum = 0; 

try { 
    myNum = Integer.parseInt(myString.getText().toString()); 
} catch(NumberFormatException nfe) { 

} 

y

Integer.valueOf(mystr); 

y

int value = Integer.parseInt(string); 

La primera me da el error: El método getText() está definido para el tipo String mientras los dos últimos no tienen ningún error de compilación, pero la aplicación falla inmediatamente cuando se llaman. Pensé que tenía que ver con mi método de búsqueda de escaneo de código de barras, pero lo puse en OnCreate y todavía obtuve el error.

+0

¿Se puede imprimir el valor de 'myString'? ¿Estás seguro de que contiene un número entero (solo dígitos, no más grande que '2^31')? ¿Recibes alguna excepción cuando la aplicación falla? – trutheality

+0

Oye, ¿sabes cómo convertir String en Cursor? Vi [esto] (http://stackoverflow.com/questions/9917935/adding-rows-into-cursor-manually) pero no pude entenderlo. –

Respuesta

41

Cambio

try { 
    myNum = Integer.parseInt(myString.getText().toString()); 
} catch(NumberFormatException nfe) { 

a

try { 
    myNum = Integer.parseInt(myString); 
} catch(NumberFormatException nfe) { 
8

Es ya una cadena? Elimine la llamada getText().

int myNum = 0; 

try { 
    myNum = Integer.parseInt(myString); 
} catch(NumberFormatException nfe) { 
    // Handle parse error. 
}
3

Uso expresión regular:

int i=Integer.parseInt("hello123".replaceAll("[\\D]","")); 
int j=Integer.parseInt("123hello".replaceAll("[\\D]","")); 
int k=Integer.parseInt("1h2el3lo".replaceAll("[\\D]","")); 

salida:

i=123; 
j=123; 
k=123; 
+0

Bueno, si quieres hacerlo de esa manera, utiliza \\ D + en lugar de [\\ D], pero si hay un flotador, hará un lío. p.ej. 12.34 resultará en 1234. Así que preferiría reemplazar All ("[^ \ d.] +", "") – FlorianB

1

Uso expresión regular:

String s="your1string2contain3with4number"; 
int i=Integer.parseInt(s.replaceAll("[\\D]", "")) 

salida: i = 1234;

Si usted necesita primeros combinación de números a continuación, usted debe tratar a continuación código:

String s="abc123xyz456"; 
int i=((Number)NumberFormat.getInstance().parse(s)).intValue() 

de salida: i = 123;

+0

Utilicé ambos métodos, pero el segundo está funcionando pero está cambiando el valor completamente. String valu "4307764028" => 12796732 – Prasad

5

Simplemente necesita escribir la línea de código para convertir su cadena a int.

int convertedVal = Integer.parseInt(YOUR STR); 
1

código de barras a menudo consisten en gran número por lo que creo que su aplicación se bloquea debido al tamaño de la cadena que se está intentando convertir a int. puede utilizar BigInteger

BigInteger reallyBig = new BigInteger(myString); 
1

No se puede convertir a la cadena si el valor entero es cero o se inicia con cero (en el que se descuida caso primero cero). Intenta cambiar.

int NUM=null; 
+0

int no es un objeto, por lo tanto, no puede ser nulo. – Nemesis

+0

bueno, si ese es el caso, entonces supongo que Microsoft solo lo habilitó en mi visualstudio. – ABi