Lectura de datos por teclado con Scanner
La clase Scanner permite leer datos desde un stream de entrada en función del tipo esperado, para ello dispone de métodos para cada tipo
next() | Devuelve el dato como String |
nextByte() | Devuelve el dato como byte |
nextDouble() | Devuelve el dato como double |
nextFloat() | Devuelve el dato como float |
nextInt() | Devuelve el dato como int |
nextLine() | Devuelve el contenido hasta el siguiente fin de línea, como string |
Si en la entrada existen múltiples datos, esta clase, los separa con el espacio y se pueden ir solicitando cada una de las partes, de forma independiente.
Hemos de tener en cuenta, que excepto en el caso de nextLine(), el carácter de fin de línea se queda en el buffer con el consiguiente problema en la posterior lectura
Para saber si en el buffer de entrada quedan más elementos, podemos utilizar hasNext(), y si los datos no vinieran separados por espacios, también podríamos utilizar useDelimiter(String) para indicar el separador.
Ejemplo:
Para solicitar por teclado dos números, podríamos hacer:
Podemos observar que si en la primera entrada, escribimos los dos números separados por un espacio, ya no se parara para solicitar la siguiente entrada. Luego, si deseamos aceptar solo una entrada en cada petición, deberemos limpiar el buffer
Lectura de datos por teclado con BufferedReader
Si queremos realizar una lectura de teclado de forma manual, podemos utilizar el stream de entrada estándar que nos proporciona System.in. Para ello, si queremos leer una línea, deberemos repetir la lectura hasta encontrar el carácter “\n” que nos marca el final de la línea; por ejemplo:
Este sistema, tiene dos inconvenientes; el primero es que nos debemos mantener en un bucle sobre el sistema de entrada subyacente, y deberemos conocer sus características, aparte de la sobrecarga que representa, el segundo, es que si debemos leer varias líneas, deberemos definir un bucle de nivel superior
Para evitar todo esto, disponemos de la clase BufferedReader que nos permite leer una línea de golpe
Antes de poderlo utilizar, tenemos que tener en cuenta que esta clase hereda de Reader, por lo que trabaja con caracteres y no con bytes, por lo que necesitamos una fuente de caracteres, y como queremos leer de la consola…
Ahora ya tenemos un InputStreamReader que podemos utilizar con
Si necesitamos leer varias líneas, lo podremos hacer con;