30/04/2011
La clase Scanner en Java es esencial para leer datos de entrada del usuario, permitiendo la interacción dinámica en tus programas. Aprender a usarla correctamente es fundamental para cualquier desarrollador Java. Este artículo te guiará paso a paso en el proceso de importar, inicializar y utilizar eficientemente la clase Scanner, incluyendo el manejo de errores y la limpieza del buffer.

Importar la clase Scanner
Antes de poder utilizar la clase Scanner, debes importarla en tu código Java. Esta clase reside en el paquete java.util. La importación se realiza con una simple línea de código al inicio de tu archivo:
import java.util.Scanner;Esta línea le indica al compilador de Java dónde encontrar la clase Scanner. Sin esta importación, el compilador no reconocerá la clase y generará un error.
Inicializar un objeto Scanner
Una vez importada, necesitas crear un objeto Scanner para comenzar a leer la entrada. Normalmente, leerás desde el flujo de entrada estándar (System.in), que representa el teclado. La inicialización se realiza de la siguiente manera:
Scanner sc = new Scanner(System.in);En este ejemplo, creamos un objeto Scanner llamado c'. Puedes usar cualquier nombre de variable válido. Este objeto estará listo para leer los datos introducidos por el usuario a través del teclado.
Métodos de la clase Scanner
La clase Scanner ofrece una variedad de métodos para leer diferentes tipos de datos. Algunos de los más utilizados incluyen:
| Método | Descripción |
|---|---|
nextBoolean() | Lee un valor booleano (true o false). |
nextByte() | Lee un valor byte. |
nextDouble() | Lee un valor double (número de punto flotante de doble precisión). |
nextFloat() | Lee un valor float (número de punto flotante de precisión simple). |
nextInt() | Lee un valor int (número entero). |
nextLine() | Lee una línea completa de texto como una cadena String. |
nextLong() | Lee un valor long (número entero de 64 bits). |
nextShort() | Lee un valor short (número entero de 16 bits). |
hasNextInt() | Verifica si el siguiente token es un entero. |
hasNextLine() | Verifica si hay una línea disponible para leer. |
La elección del método dependerá del tipo de dato que esperas recibir del usuario.
Ejemplo básico de uso de Scanner
Un ejemplo sencillo que demuestra cómo leer diferentes tipos de datos usando Scanner :
import java.util.Scanner;public class EjemploScanner { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("Introduce tu nombre: "); String nombre = sc.nextLine(); System.out.print("Introduce tu edad: "); int edad = sc.nextInt(); System.out.print("Introduce tu altura: "); double altura = sc.nextDouble(); System.out.println("Nombre: " + nombre); System.out.println("Edad: " + edad); System.out.println("Altura: " + altura); sc.close(); // Cierra el Scanner }}Este código lee un nombre (String), edad (int) y altura (double) del usuario.
Manejo de errores con Scanner
Es crucial manejar los posibles errores que puedan ocurrir al leer datos del usuario. Por ejemplo, si el programa espera un entero y el usuario introduce texto, se producirá una excepción. Para prevenir esto, utiliza métodos como hasNextInt()para verificar el tipo de dato antes de leerlo:
import java.util.Scanner;public class ManejoErroresScanner { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("Introduce un número entero: "); while (!sc.hasNextInt()) { System.out.println("Entrada inválida. Introduce un número entero."); sc.next(); // Limpia la entrada errónea } int numero = sc.nextInt(); System.out.println("Has introducido: " + numero); sc.close(); // Cierra el Scanner }}Este código verifica si la entrada es un entero antes de leerlo, solicitando una nueva entrada si es incorrecta.
Limpieza del buffer del Scanner
Después de usar nextInt(), nextDouble(), etc., el Scanner puede dejar un carácter de nueva línea en el buffer. Esto puede causar problemas si luego intentas leer una línea completa con nextLine(). Para solucionar esto, llama a nextLine()después de leer un tipo de dato numérico para limpiar el buffer:
import java.util.Scanner;public class LimpiezaBufferScanner { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("Introduce tu edad: "); int edad = sc.nextInt(); sc.nextLine(); // Limpia el buffer System.out.print("Introduce tu nombre: "); String nombre = sc.nextLine(); System.out.println("Edad: " + edad); System.out.println("Nombre: " + nombre); sc.close(); // Cierra el Scanner }}En este ejemplo, sc.nextLine();limpia el buffer después de leer la edad, previniendo problemas al leer el nombre.
Cierre del Scanner
Es una buena práctica cerrar el objeto Scanner una vez que hayas terminado de usarlo. Esto libera los recursos del sistema. Puedes hacerlo usando el método close():
sc.close();Recuerda agregar esta línea al final de tu programa después de haber terminado de leer la información del usuario.
Consultas habituales sobre Scanner en Java
- ¿Cómo leer una línea completa de texto con Scanner? Utiliza el método
nextLine(). - ¿Cómo manejar errores de entrada con Scanner? Usa métodos como
hasNextInt(),hasNextDouble(), etc., para verificar el tipo de dato antes de leerlo. - ¿Por qué mi Scanner no lee la línea después de leer un número? Probablemente necesitas limpiar el buffer usando
nextLine(). - ¿Cómo cerrar el Scanner? Utiliza el método
close().
Dominar el uso de la clase Scanner te permitirá crear programas Java más interactivos y robustos. Recuerda practicar con diferentes ejemplos y explorar las diversas funcionalidades que ofrece esta herramienta esencial.
Si quieres conocer otros artículos parecidos a Agregar librería scanner a código java puedes visitar la categoría Libros y Librerías.
