Tomar una entrada char del escáner
Estoy tratando de encontrar una manera de tomar una entrada char
desde el teclado.
He intentado usar:
Scanner reader = new Scanner(System.in);
char c = reader.nextChar();
Este método no existe.
He intentado tomar c
como String
. Sin embargo, no siempre funcionaría en todos los casos, ya que el otro método que estoy llamando desde mi método requiere un char
como entrada. Por lo tanto, tengo que encontrar una manera de tomar explícitamente un char como entrada.
¿Alguien puede ayudarme?
112
3
Podría tomar el primer carácter de
Scanner.next
:Para consumir exactamente un carácter podrías usar
Para consumir estrictamente un carácter podrías usar:
No hay ningún método de la API para obtener un carácter del Scanner. Debe obtener la cadena usando
scanner.next()
e invocar el métodoString.charAt(0)
en la cadena devuelta.Sólo para estar seguro con los espacios en blanco que también podría llamar primero
trim()
en la cadena para eliminar cualquier espacio en blanco.Hay tres maneras de abordar este problema:
Llamar a
next()
en el Escáner, y extraer el primer carácter de la Cadena (por ejemplo,charAt(0)
) Si quiere leer el resto de la línea como caracteres, iterar sobre los caracteres restantes de la Cadena. Otras respuestas tienen este código.Utilice
setDelimiter("")
para establecer el delimitador a una cadena vacía. Esto hará quenext()
tokenice en cadenas que tienen exactamente un carácter. Entonces puede llamar repetidamente anext().charAt(0)
para iterar los caracteres. A continuación, puede establecer el delimitador a su valor original y reanudar el escaneo de forma normal.Utilice la API del lector en lugar de la API del escáner. El método
Reader.read()
entrega un solo carácter leído del flujo de entrada. Por ejemplo:Cuando lees desde la consola a través de
System.in
, la entrada es típicamente almacenada por el sistema operativo, y sólo "liberada" a la aplicación cuando el usuario escribe ENTER. Por lo tanto, si usted pretende que su aplicación responda a las pulsaciones individuales del teclado, esto no va a funcionar. Tendrías que hacer algo de código nativo específico del sistema operativo para desactivar o evitar el búfer de línea para la consola a nivel del sistema operativo.Referencia: