Foro de elhacker.net

Programación => 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
  1. scanner.next(".").charAt(0);

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

Citar
Exception 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
  1. scanner.useDelimiter("");

Y luego lees con:
Código
  1. 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
creo que es porque BufferedRead tendrá un búfer interno
Es lo suyo xD