Método práctico para leer desde teclado
Para facilitar la lectura de teclado se puede conseguir que se lea una línea entera con una sola orden si se utiliza un objeto BufferedReader. El método String readLine() perteneciente a BufferReader lee todos los caracteres hasta encontrar un ‘\n’ o ‘\r’ y los devuelve como un String (sin incluir ‘\n’ ni ‘\r’). Este método también puede lanzar java.io.IOException.
System.in es un objeto de la clase InputStream. BufferedReader pide un Reader en el constructor. El puente de unión necesario lo dará InputStreamReader, que acepta un InputStream como argumento del constructor y es una clase derivada de Reader. Por lo tanto si se desea leer una línea completa desde la entrada estándar habrá que utilizar el siguiente código:
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
// o en una línea:
// BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
String frase = br2.readLine(); // Se lee la línea con una llamada
Así ya se ha leido una línea del teclado. El thread que ejecute este código estará parado en esta línea hasta que el usuario termine la línea (pulse return). Es más sencillo y práctico que la posibilidad anterior.
¿Y qué hacer con una línea entera? La clase java.util.StringTokenizer da la posibilidad de separar una cadena de carácteres en las “palabras” (tokens) que la forman (por defecto, conjuntos de caracteres separados por un espacio, ‘\t’, ‘\r’, o por ‘\n’). Cuando sea preciso se pueden convertir las “palabras” en números.
La Tabla 9.5 muestra los métodos más prácticos de la clase StringTokenizer.
La clase StreamTokenizer de java.io aporta posibilidades más avanzadas que StringTokenizer, pero también es más compleja. Directamente separa en tokens lo que entra por un InputStream o Reader.
Se recuerda que la manera de convertir un String del tipo “3.141592654” en el valor double correspondiente es crear un objeto Double a partir de él y luego extraer su valor double:
double pi = (Double.valueOf(«3.141592654»)).doubleValue();
El uso de estas clases facilita el acceso desde teclado, resultando un código más fácil de escribir y de leer. Además tiene la ventaja de que se puede generalizar a la lectura de archivos.
Fuente: Aprenda Java como si estuviera en primero de la Universidad de Navarra