Java.lang.NumberFormatException: Invalid int: "5"

Trato de leer un archivo .txt que es básicamente un archivo CSV que se encuentra en la carpeta de activos en Android. En la primera fila hay el número de fila y columnas del archivo El resto está compuesto por los valores, yo uso un ";" para separarse entre sí.

Aquí está el código que causa este error extraño:

public static int[][] getMatrix(InputStream stream) throws Exception { BufferedReader br = new BufferedReader((new InputStreamReader(stream, "UTF-8"))); String buffer; String[] current; int[][] marbles = null; //Reading the matrix from file if((buffer = br.readLine()) != null) { current = buffer.split(delimiter); if(current.length !=2){ throw new Exception("File format is not respected"); } marbles = new int[Integer.parseInt(current[0])][Integer.parseInt(current[1])]; int count = 0; while ((buffer = br.readLine()) != null) { current = buffer.split(delimiter); for (int i=0;i<current.length;i++){ marbles[count][i] = Integer.parseInt(current[i]); } count++; } } br.close(); return marbles; } 

Leo un archivo usando como InputStream el que obtengo del método getAssets (). Open ().

Aquí está el archivo csv:

 5;11 1;1;2;1;1;2;1;1;1;2;-1 1;2;1;1;2;2;1;2;2;1;-1 2;2;1;2;1;2;2;1;1;2;-1 1;1;2;1;1;1;1;2;1;2;-1 2;2;1;2;2;1;2;1;1;1;-1 

Tengo el error en la primera línea, pero muestra claramente que la cadena que lo causa es un "5" adecuado.

Error:

 java.lang.NumberFormatException: Invalid int: "5" 

que es, por supuesto, causada por la parte de código que intenta convertir la cadena en un entero.

Mi salvaje suposición es que su archivo contiene una lista de materiales al principio de su flujo de texto que es confuso su analizador. Puede utilizar el comando file en un sistema * NIX para verificar esto.

Intente intercambiar esa primera línea con otra y vea si obtiene el mismo error con el primer número en otra línea. Si se configuró la lista de materiales, google "eliminación de bombeo de utf-8" para obtener más instrucciones.

La única causa posible para este comportamiento son símbolos no imprimibles en su archivo. Mira esta pregunta: ¿Cómo puedo reemplazar caracteres Unicode no imprimibles en Java? y aplique la función dada a todos sus valores, es decir:

 marbles = new int[Integer.parseInt(current[0].replaceAll("\\p{C}", "?"))][Integer.parseInt(current[1].replaceAll("\\p{C}", "?"))] 

En mi caso el problema que un atributo personalizado definido sin ningún valor asignado.

 <FrameLayout android:id="@+id/header" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="?attr/image_visibility"> </FrameLayout> 

Y esta es la definición del atributo personalizado:

 <attr name="image_visibility"> <enum name="visible" value="0"/> <enum name="invisible" value="1"/> <enum name="gone" value="2"/> </attr> 

El problema era que no asigné ningún valor para este atributo personalizado.
Eliminar ese atributo personalizado o asignarle un valor solucionará el error.

  • Lectura de JSON con Retrofit
  • ¿Puedo detectar mediante programación si hay dispositivos Chromecast en la red WiFi actual?
  • Cómo obtener Resource (int) de String - Android
  • Java - buscar host por dirección MAC
  • Servicio ha filtrado IntentReceiver en android
  • Java.lang.RuntimeException: falló la toma de imagen
  • ¿Transferir un archivo entre dispositivos Android?
  • Expresión regular para eliminar todos los caracteres no imprimibles
  • set androide del mapbox de la imagen de la demostración
  • Actualizado a AppCompat v22.1.0 y ahora obtener "eliminar atributo" error
  • Cambiar la listaVer el color seleccionado en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.