convirtiendo los valores de cadena numérica en formato .CSV a enteros en Java
Estoy tratando de obtener 3 valores enteros de un archivo CSV y cargarlos en una variable que pueda usar en una función cuadrática. Lo que me está costando es que cuando obtengo los valores del CSV, se tratan como una cadena. He intentado usar Integer.parseInt(variable);
y Double.parseDouble(variable);
. He intentado solucionar el problema con variable.getClass()
y mensajes de impresión y sigo sin entender qué ocurre.
Mi código es el siguiente:
public static void main(String[] args) {
String pathFile = "/Users/stephen/QuadData3.csv";
String line = "";
try {
BufferedReader br = new BufferedReader(new FileReader(pathFile));
while ((line = br.readLine()) != null) {
String[] values = line.split(",");
int a = Integer.parseInt(values[0]);
int b = Integer.parseInt(values[1]);
int c = Integer.parseInt(values[2]);
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Obtengo el siguiente error:
Exception in thread "main" java.lang.NumberFormatException: For input string: "4"
Cualquier ayuda sería muy apreciada.
davy.ai
Parece que el problema puede estar relacionado con la codificación del archivo CSV. El mensaje de error muestra que la cadena que se pasa a
parseInt()
incluye un carácter especial al principio, lo cual es probablemente un indicador de la codificación.Una cosa que puedes intentar es abrir el archivo CSV en un editor de texto y comprobar la codificación. Debe ser UTF-8 o ASCII. Si es una codificación diferente, intenta guardar el archivo con codificación UTF-8 o ASCII y ve si eso soluciona el problema.
Otra cosa que puedes comprobar es si hay algún carácter oculto en el archivo CSV, como espacios o tabulaciones, que puedan estar causando problemas. Puedes intentar recortar las cadenas antes de pasarlas a
parseInt()
usandovalues[0].trim()
.Si estas sugerencias no resuelven el problema, intenta imprimir los valores de
values[0]
,values[1]
yvalues[2]
para verificar que realmente son cadenas que contienen solo números sin caracteres adicionales. También puedes intentar usarInteger.valueOf()
en lugar deparseInt()
para ver si eso hace alguna diferencia.¡Espero que esto ayude a resolver tu problema!