Estoy tratando de devolver datos del archivo con un conjunto de oraciones y un limitador. Aquí está el ejemplo de mi inputs.txt.

1
The dog
The cat
The mouse
The mouse
The cow
The boat

Con la primera línea como limitador, intento obtener solo la primera oración, pero devuelve una cadena vacía. Aquí está mi código:

import java.io.*; 
import java.util.*;
import java.lang.*;

class dep {
    public static void main(String args[] ) throws Exception {
        int count = 0;
        Scanner s = new Scanner(new File("inputs.txt"));
        int lim = s.nextInt();

        while(s.hasNextLine() && lim != count) {
            String line = s.nextLine();
            System.out.println(line);
            count++;      
        }    
            System.out.print("==DONE LOOPING==");
    }
}

Output:

<empty_string>
==DONE LOOPING==

Expected output

The dog
==DONE LOOPING==
2
You Awesum 24 feb. 2018 a las 11:36

2 respuestas

La mejor respuesta

s.nextInt() simplemente lee el siguiente int, dejando el resto de la línea para más tarde.

Entonces, su primera pasada del ciclo lee solo la nueva línea después del 1.

Para probar esto, cambie su primera línea a

1 foo

Y vea lo que genera su programa.

Para solucionarlo, haga un nextLine() después de nextInt().

1
Taher Khorshidi 24 feb. 2018 a las 08:47

nextInt() no consume el carácter de nueva línea y nextLine() consume todo lo necesario. Necesita otro nextLine() para consumir ese carácter de nueva línea antes de comenzar a reproducir:

int lim = s.nextInt();
s.nextLine(); // Consume the newline after the limit

while(s.hasNextLine() && lim != count) {
    String line = s.nextLine();
    System.out.println(line);
    count++;      
}   
1
Mureinik 24 feb. 2018 a las 08:39