Dominando Java Scanner: Guía Completa con Ejemplos Prácticos
Dominando Java Scanner
Descubre cómo usar la clase Scanner de Java para leer texto, números y tipos complejos desde diversas fuentes, respaldado por ejemplos claros del mundo real.
La clase Scanner en java.util te permite capturar entrada desde flujos, archivos, cadenas y la consola. A continuación recorremos sus patrones de uso principales.
Ejemplo 1: Leyendo una Línea Completa de Texto
import java.util.Scanner;
class Main {
public static void main(String[] args) {
// Crear un Scanner que lee de la entrada estándar
Scanner entrada = new Scanner(System.in);
System.out.print("Introduce tu nombre: ");
// Leer una línea completa, incluyendo espacios
String nombre = entrada.nextLine();
System.out.println("Mi nombre es " + nombre);
entrada.close();
}
}
Salida
Introduce tu nombre: Kelvin Mi nombre es Kelvin
Observa la línea Scanner entrada = new Scanner(System.in); – construye un Scanner que escucha la entrada del teclado.
El método nextLine() consume toda la línea hasta un salto de línea.
Importando la Clase Scanner
Antes de poder usar Scanner, impórtalo:
import java.util.Scanner;
Para más sobre importación de paquetes, consulta Paquetes de Java.
Creando Objetos Scanner
Dependiendo de tu fuente de entrada, instancia un Scanner así:
// Desde un flujo de entrada (ej., System.in)
Scanner sc1 = new Scanner(InputStream input);
// Desde un archivo
Scanner sc2 = new Scanner(File file);
// Desde una cadena
Scanner sc3 = new Scanner(String str);
Métodos Principales de Scanner para Entrada
La clase Scanner ofrece una variedad de métodos para leer diferentes tipos de datos. A continuación una referencia rápida:
| Método | Descripción |
|---|---|
nextInt() | Leer un int |
nextFloat() | Leer un float |
nextBoolean() | Leer un boolean |
nextLine() | Leer una línea completa de texto |
next() | Leer una sola palabra (hasta espacio en blanco) |
nextByte() | Leer un byte |
nextDouble() | Leer un double |
nextShort() | Leer un short |
nextLong() | Leer un long |
Ejemplo 2: Usando nextInt()
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.println("Introduce un entero: ");
int dato1 = entrada.nextInt();
System.out.println("Usando nextInt(): " + dato1);
entrada.close();
}
}
Salida
Introduce un entero: 22 Usando nextInt(): 22
Ejemplo 3: Usando nextDouble()
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.print("Introduce valor Double: ");
double valor = entrada.nextDouble();
System.out.println("Usando nextDouble(): " + valor);
entrada.close();
}
}
Salida
Introduce valor Double: 33.33 Usando nextDouble(): 33.33
Ejemplo 4: Usando next()
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.print("Introduce tu nombre: ");
String valor = entrada.next();
System.out.println("Usando next(): " + valor);
entrada.close();
}
}
Salida
Introduce tu nombre: Jonny Walker Usando next(): Jonny
Observa que next() se detiene en el primer espacio en blanco, por lo que solo se captura el primer nombre.
Ejemplo 5: Usando nextLine()
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.print("Introduce tu nombre: ");
String valor = entrada.nextLine();
System.out.println("Usando nextLine(): " + valor);
entrada.close();
}
}
Salida
Introduce tu nombre: Jonny Walker Usando nextLine(): Jonny Walker
A diferencia de next(), nextLine() captura la línea completa, incluyendo espacios, hasta un carácter de nueva línea.
Lectura Recomendada: Java Scanner saltando nextLine()
Scanner con BigInteger y BigDecimal
Para números de alta precisión, Scanner soporta:
- nextBigInteger() – Lee un
BigInteger - nextBigDecimal() – Lee un
BigDecimal
Ejemplo: Leyendo BigInteger y BigDecimal
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.print("Introduce un entero grande: ");
BigInteger valor1 = entrada.nextBigInteger();
System.out.println("Usando nextBigInteger(): " + valor1);
System.out.print("Introduce un decimal grande: ");
BigDecimal valor2 = entrada.nextBigDecimal();
System.out.println("Usando nextBigDecimal(): " + valor2);
entrada.close();
}
}
Salida
Introduce un entero grande: 987654321 Usando nextBigInteger(): 987654321 Introduce un decimal grande: 9.55555 Usando nextBigDecimal(): 9.55555
Cómo Funciona Scanner Internamente
Scanner lee una línea completa, luego la divide en tokens usando espacio en blanco por defecto. Cada token puede recuperarse con el método apropiado. Por ejemplo, dada la entrada Él tiene 22, los tokens son Él, tiene y 22.
Consejo: Los tokens se separan por espacios, tabulaciones o nuevas líneas a menos que personalices el delimitador.
Java
- Palabra clave final en Java: Variables, métodos y clases
- Operador instanceof en Java: Guía completa
- Dominando la herencia en Java: Conceptos, tipos y ejemplos prácticos
- Entendiendo las clases anidadas estáticas en Java: Uso, diferencias y ejemplos
- Dominando las clases internas anónimas en Java: Definición, sintaxis y ejemplos prácticos
- Patrón Singleton en Java explicado: Cómo implementarlo y usarlo de forma segura
- Dominando la Reflexión en Java: Inspeccionando clases, métodos y campos en tiempo de ejecución
- Dominando ObjectOutputStream de Java: Serialización, Métodos y Ejemplos Prácticos
- Dominando Java Scanner: Guía Completa con Ejemplos Prácticos
- Dominando Java Generics: Construyendo Código Reutilizable y Type-Safe
- Dominando las operaciones de archivos en Java con java.io: creación, lectura, escritura y eliminación