Test Foro de elhacker.net SMF 2.1

Programación => Programación General => Java => Mensaje iniciado por: class_OpenGL en 3 Noviembre 2017, 16:05 PM

Título: (Consulta) Leer *exactamente* un carácter en Java
Publicado por: class_OpenGL en 3 Noviembre 2017, 16:05 PM
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
Título: Re: (Consulta) Leer *exactamente* un carácter en Java
Publicado por: ivancea96 en 3 Noviembre 2017, 16:59 PM
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.
Título: Re: (Consulta) Leer *exactamente* un carácter en Java
Publicado por: class_OpenGL en 3 Noviembre 2017, 17:26 PM
¿De verdad Java no proporciona ninguna manera de leer un carácter? Puffffffffff
Título: Re: (Consulta) Leer *exactamente* un carácter en Java
Publicado por: ivancea96 en 3 Noviembre 2017, 18:22 PM
Otra opción es utilizar un BufferedReader en vez de un Scanner y utilizar read(), que lee 1 caracter.
Título: Re: (Consulta) Leer *exactamente* un carácter en Java
Publicado por: class_OpenGL en 3 Noviembre 2017, 19:23 PM
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
Título: Re: (Consulta) Leer *exactamente* un carácter en Java
Publicado por: ivancea96 en 3 Noviembre 2017, 22:12 PM
Cita de: class_OpenGL en  3 Noviembre 2017, 19:23 PM
creo que es porque BufferedRead tendrá un búfer interno
Es lo suyo xD