es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El delimitador del escáner de Java causa que mi entero no se lea correctamente.

Entonces estoy creando un escáner para leer de un archivo de texto simple:

import java.io.*;  
import java.util.Scanner;

public class Weather {
    public static void main(String[] args) throws FileNotFoundException {

        int a;

        File weatherData = new File("C:\\Users\\taddi\\eclipse-workspace\\COS_160_ASSIGNMENT_10\\src\\PortlandWeather1941to2018.txt");

        Scanner scnr = new Scanner(weatherData);
        scnr.useDelimiter("//");

        int totalCount = scnr.nextInt();// this reads the number at the beginning and uses it so I know how many times to run the loop
        String throwAway1 = scnr.nextLine();//these statement are used to throw a way the rest of line 1, and all of line 2 and 3
        String throwAway2 = scnr.nextLine();
        String throwAway3 = scnr.nextLine();

        int[] month = new int[totalCount];
        int[] day = new int[totalCount];
        int[] year = new int[totalCount];

        int[] tmax = new int[totalCount];
        int[] tmin = new int[totalCount];

        for(a = 0; a < totalCount; a ++) {
            month[a] = scnr.nextInt();
            System.out.println(month[a]);
            day[a] = scnr.nextInt();
            System.out.println(day[a]);
            year[a] = scnr.nextInt();

            tmax[a] = scnr.nextInt();
            tmin[a] = scnr.nextInt();
        }
    }
}

La primera parte del archivo de texto es un número entero que estoy tratando de leer. Por alguna razón, solo lee ese número cuando comento la línea scnr.useDelimiter("//");, de lo contrario, obtengo una excepción de tipo InputMismatchException. Me gustaría simplemente deshacerme de todas las palabras y barras innecesarias en el archivo de texto, pero eso no satisfaría la tarea. ¿Qué está pasando con el delimitador? ¿Cómo puedo leer el número entero?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Solución

    El delimitador que se está utilizando aquí es una doble barra diagonal hacia adelante (//). Sin embargo, este también es un símbolo de comentario en Java, lo que significa que todo lo que está después del delimitador se trata como un comentario y no es leído por el escáner.

    Para solucionar esto, debes escapar las barras diagonales hacia adelante en el delimitador utilizando una barra invertida (\) de la siguiente manera:

    scnr.useDelimiter("\\s*//\\s*");
    

    Esto le indica al escáner que trate las dobles barras diagonales como delimitadores, mientras ignora cualquier espacio en blanco alrededor de ellas.

    Alternativamente, puedes simplemente usar un espacio como delimitador, ya que el archivo de texto parece estar estructurado con espacios entre los valores:

    scnr.useDelimiter(" ");
    

    Esto debería funcionar bien para leer el valor entero al principio del archivo.

Comments are closed.