Ver this respuesta para una solución más eficiente.
Esta es una solución muy fea, pero puede crear una clase contenedora alrededor de Scanner
que conserve dos objetos internos Scanner
. Puede obtener la funcionalidad peek()
teniendo el segundo escáner uno delante del otro
Esta es una solución muy básica (solo para darle una idea de lo que estoy hablando) y no implementa todo lo que necesitaría (pero solo necesitaría implementar aquellas partes que usaría). (también, esto no se ha probado, así que tómalo con un grano de sal).
import java.util.Scanner;
public class PeekableScanner
{
private Scanner scan1;
private Scanner scan2;
private String next;
public PeekableScanner(String source)
{
scan1 = new Scanner(source);
scan2 = new Scanner(source);
next = scan2.next();
}
public boolean hasNext()
{
return scan1.hasNext();
}
public String next()
{
next = (scan2.hasNext() ? scan2.next() : null);
return scan1.next();
}
public String peek()
{
return next;
}
}
Se me ocurre que probablemente podría hacerlo en un escáner simplemente manteniendo la referencia al objeto 'next()'. –
Ok, agregué esa respuesta como otra respuesta (no quería simplemente agregarla a esto porque quería mantener esto como una posible solución). En algunos casos (si está haciendo cosas bastante complejas con sus escáneres), esto podría ser más fácil de envolver, pero la otra solución es más eficiente. –
Tenga en cuenta que su constructor PeekableScanner arrojaría NoSuchElementException si la cadena estuviera vacía o solo tuviera espacio en blanco. –