miércoles, 20 de agosto de 2008

Lectura con la clase java.util.Scanner

Esta clase es un simple escaner de texto que permite procesar tipos primitivos y cadenas usando expresiones regulares.

Un Scanner divide su entrada en tokens usando un patrón delimitador, que por defecto es el espacio en blanco. Los tokens resultantes pueden ser convertidos en diferentes tipos usando los diferentes métodos next.

Esta clase puede ser utilizada desde Java 5.

El siguiente ejemplo permite leer desde la consola:

import java.util.Scanner;

public class UsoDeScanner1 {
public static void main (String args[]){

String nombre, apellido;
int edad;

Scanner sc = new Scanner(System.in); //Se indica que se quiere leer desde consola
System.out.print("Introduce tu nombre, apellido y edad: ");
nombre = sc.next();
apellido = sc.next();

edad = sc.nextInt();
System.out.println("Nombre: " + nombre);
System.out.println("Apellido: " + apellido);
System.out.print("Edad: " + edad);
}
}


Observa que el método nextInt() nos permite leer un tipo int, y el método next() nos permite leer un token (devuelve un String). Hay un método next para cada tipo de dato primitivo. Si se desea leer todos los tokens al mismo tiempo se utiliza el método nextLine().


Ejemplo2:


import java.util.Scanner;

public class UsoDeScanner2 {
public static void main (String args[]){


String mensaje1, mensaje2;

float numero;
Scanner sc = new Scanner("6.5 Hola Mundo\n Nueva Línea"); //Se indica que se quiere trabajar con una cadena fija

numero=sc.nextFloat();
mensaje1=sc.nextLine();

mensaje2=sc.nextLine();
System.out.println("Numero: " + numero);
System.out.println("Mensaje1:" + mensaje1);

System.out.println("Mensaje2:" + mensaje2);
}
}

En este caso, se trabajo con una cadena fija. El método nextFloat() obtiene el valor flotante 6.5, mientras que la primera llamada al método nextLine() obtiene el texto " Hola Mundo". Observa que se incluye el espacio en blanco, ya que el método nextLine() obtiene el texto que no ha sido procesado hasta encontrar un salto de línea o el fin de la cadena. La última llamada a nextLine() obtiene el texto " Nueva Línea".

Como último ejemplo, haremos un Scanner que divida la cadena en tokens usando el simbolo de dolar ( $ ):

import java.util.Scanner;
import java.io.File;

public class UsoDeScanner3 {
public static void main (String args[]) throws java.io.FileNotFoundException{

Scanner sc = new Scanner(new File("cadena.txt"));//Se indica que se quiere trabajar con un archivo de texto

sc.useDelimiter("[$]");

while (sc.hasNext())
System.out.println(sc.next());
}
}

En este ejemplo, leemos desde un archivo de texto la cadena que queremos analizar (se debe controlar la excepción java.io.FileNotFoundException). Observa que utilizamos el método hasNext() para leer todos los tokens como String.
Si el archivo tuviera la cadena Ejemplo$de$Scanner$3 la salida resultante sería:
Ejemplo
de
Scanner
3

No hay comentarios: