El problema con las sugerencias de usar scanner.nextLine()
es que en realidad devuelve la siguiente línea como String
. Eso significa que cualquier texto que esté allí se consume. Si está interesado en escanear el contenido de esa línea ... ¡muy mal! Debería analizar el contenido del String
devuelto usted mismo.
Una mejor manera sería utilizar
while (scanner.findInLine("(?=\\S)") != null) {
// Process the line here…
…
// After processing this line, advance to the next line (unless at EOF)
if (scanner.hasNextLine()) {
scanner.nextLine();
} else {
break;
}
}
Desde (?=\S)
es una afirmación lookahead de anchura cero, que nunca se consume ninguna entrada. Si encuentra un texto que no sea de espacio en blanco en la línea actual, ejecutará el cuerpo del bucle.
Puede omitir el else break;
si está seguro de que el cuerpo del bucle ya habrá consumido todo el texto que no sea de espacio en blanco en esa línea.
Esto tiene un efecto secundario de obtener la línea ya (por ejemplo, necesitaría dividir la línea por espacios si quiero analizar valores separados por espacios). ¿Hay un método de tipo 'hasNextLine()' donde el "puntero" no pasa a la siguiente línea? –
Err, no entiendo qué hay de malo en dividir la línea ... –
@jiewmeng - cuando llame a 'scanner.hasNext()' necesitará buscar la línea para verificar si está vacía y procesarla. ¿Podrías explicar por qué la respuesta de Bart no funcionaría para ti? – luketorjussen