(Consulta) Leer *exactamente* un carácter en Java

Iniciado por class_OpenGL, 3 Noviembre 2017, 16:05 PM

0 Miembros y 3 Visitantes están viendo este tema.

class_OpenGL

Hola, muy buenas.

He estado investigando cómo leer un carácter de la consola (saltándose los espacios, leyendo un carácter, y parar), pero no he encontrado nada que sea exáctamente eso. Quiero leer exactamente uno porque estoy leyendo posiciones en un tablero de ajedrez, las cuales se dan con la siguiente sintaxis: <columna><fila>, donde <columna> es una letra que va desde la 'a' hasta la 'h', y <fila> es un número del 1 al 8. Por ejemplo, la posición d5 indica la fila 5, columna 5 (empezando desde 1). La forma más típica que encuentro en internet es la siguiente:

Código (java) [Seleccionar]
scanner.next(".").charAt(0);

El problema, es que al poner d5, me salta la siguiente excepción:

CitarException in thread "main" java.util.InputMismatchException
   at java.base/java.util.Scanner.throwFor(Scanner.java:860)
   at java.base/java.util.Scanner.next(Scanner.java:1497)
   at java.base/java.util.Scanner.next(Scanner.java:1428)
   at Ejercicio_08.main(Ejercicio_08.java:16)

Lo cual no tiene mucho sentido, porque '.' en la regexp significa un solo carácter.

Espero que puedan ayudarme, gracias

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

ivancea96

Si vas a leer de 1 en 1, puedes poner el delimitador a "":
Código (java) [Seleccionar]
scanner.useDelimiter("");

Y luego lees con:
Código (java) [Seleccionar]
scanner.next();

De todos modos, te recomendaría utilizar nextLine() y simplemente coger los caracteres que quieras de la línea.

class_OpenGL

¿De verdad Java no proporciona ninguna manera de leer un carácter? Puffffffffff

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

ivancea96

Otra opción es utilizar un BufferedReader en vez de un Scanner y utilizar read(), que lee 1 caracter.

class_OpenGL

#4
No funciona con BufferedReader. Se salta el 5 (lee la palabra completa). Ah, creo que es porque BufferedRead tendrá un búfer interno, y estoy mezclando BufferedReader con Scanner. Solamente usaré BufferedReader

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

ivancea96