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);
}
Esta pregunta ya tiene una respuesta aquí:
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);