java arraylist java.util.scanner

java - El escáner omite cada segunda línea del archivo



arraylist java.util.scanner (5)

Cada vez que llama a scan.nextLine (), el escáner pasa a la siguiente línea. Lo llamas dos veces dentro del bucle (la primera vez para verificar, la segunda para agregar). Esto significa que marca una línea y agrega la siguiente.

La solución es llamarlo una vez y almacenarlo en una variable:

while(scan.hasNextLine()) { String str = scan.nextLine(); if(str.equals("*")) break; words.add(str); }

Estoy tratando de escanear un archivo de texto y colocar cada línea en una lista de matrices, y dejar de escanear cuando la siguiente línea es un ''*'', sin embargo, mi lista de matrices está almacenando cada segunda línea y no estoy seguro de por qué.

Scanner scan = new Scanner(new File("src/p/input2.txt")); ArrayList<String> words = new ArrayList<String>(); while(scan.hasNextLine()) { if(scan.nextLine().equals("*")) break; words.add(scan.nextLine()); }

El archivo de texto:

1 dip lip mad map maple may pad pip pod pop sap sip slice slick spice stick stock * spice stock may pod

Lo que se está almacenando en mi lista de arrays:

[salsa, loco, arce, almohadilla, vaina, savia, rebanada, especia, caldo]


El problema está aquí:

while(scan.hasNextLine()) { if(scan.nextLine().equals("*")) break; words.add(scan.nextLine()); // --> You are reading two time in same loop }

Entonces, en lugar de leer dos veces, simplemente use una variable temporal para almacenar el valor y luego use esa variable temporal en bucle.

Puedes usar el siguiente código:

while(scan.hasNextLine()) { String temp = scan.nextLine(); if(temp.equals("*")) break; words.add(temp); }


Intenta con esto,

Scanner scan = new Scanner(new File("src/p/input2.txt")); ArrayList<String> words = new ArrayList<String>(); while(scan.hasNextLine()) { String readLine = scan.nextLine(); if(readLine.equals("*")) { // if you want just skip line then use use continue-keyword // continue; // if you want just stop parsing then use use break-keyword break; } words.add(readLine); }


Lo estás leyendo dos veces.

Guárdelo, úselo.

while(scan.hasNextLine()) { String str = null; if((str =scan.nextLine()).equals("*")) break; words.add(str);//here you are not reading again. }


Siempre está leyendo la línea dos veces (a menos que obtenga un * )

if(scan.nextLine().equals("*")) // read here - "someString" break; words.add(scan.nextLine()); // ignore last read line and read again.

Usted lee solo una vez y luego compara.

String value = scan.nextLine(); // check for null / empty here if (value.equals("*")) break; words.add(value);