Páginas

Metodos hasNext()

Cómo usar los métodos hasNext...() de Scanner en Java

En Java, la clase Scanner trae varios métodos hasNext... que permiten validar el siguiente token antes de leerlo. Esto evita errores cuando el usuario escribe un valor que no corresponde al tipo esperado.

Crear el Scanner

import java.util.Scanner;
Scanner sc = new Scanner(System.in);

Principales métodos hasNext...

  • hasNext(): devuelve true si hay algún token disponible.
  • hasNextInt(): verifica si el siguiente token es un int válido.
  • hasNextDouble(): verifica si el siguiente token es un double válido.
  • hasNextFloat(): verifica si el siguiente token es un float.
  • hasNextLong(): verifica si el siguiente token es un long.
  • hasNextLine(): devuelve true si hay otra línea completa disponible.
  • hasNextBoolean(): verifica si el siguiente token es true o false.
  • hasNext(Pattern pattern): comprueba si el siguiente token coincide con una expresión regular.

Ejemplos

Validar un entero con if

System.out.print("Escribe un número entero: ");
if (sc.hasNextInt()) {
    int n = sc.nextInt();
    System.out.println("Leíste: " + n);
} else {
    System.out.println("Eso no es un entero.");
    sc.next(); // consumir token inválido
}

Leer varios enteros con while

System.out.println("Escribe enteros (Ctrl+D/Ctrl+Z para terminar):");
while (sc.hasNextInt()) {
    int n = sc.nextInt();
    System.out.println("Leído: " + n);
}
System.out.println("Fin de enteros.");

Combinar distintos tipos

System.out.print("Edad: ");
if (sc.hasNextInt()) {
    int edad = sc.nextInt();
    sc.nextLine(); // limpiar el salto de línea pendiente
    System.out.print("Nombre completo: ");
    String nombre = sc.nextLine();
    System.out.println(nombre + ", " + edad + " años");
} else {
    System.out.println("Edad inválida.");
}

Usar expresiones regulares

System.out.print("Escribe solo letras: ");
if (sc.hasNext("[a-zA-Z]+")) {
    String s = sc.next();
    System.out.println("Bien: " + s);
} else {
    System.out.println("No cumple la expresión.");
}

Buenas prácticas

  • Validar siempre con hasNext...() antes de leer con next...().
  • Usar sc.nextLine() para limpiar el buffer cuando se mezclan números y líneas.
  • Cerrar el scanner al finalizar con sc.close();.