Estoy tratando de encontrar una manera de tomar una char
entrada desde el teclado.
Intenté usar:
Scanner reader = new Scanner(System.in);
char c = reader.nextChar();
Este método no existe.
Traté de tomar c
como un String
. Sin embargo, no siempre funcionaría en todos los casos, ya que el otro método al que llamo desde mi método requiere char
una entrada. Por lo tanto, tengo que encontrar una manera de tomar explícitamente un char como entrada.
¿Alguna ayuda?
java
input
char
java.util.scanner
Ralph
fuente
fuente
char c = reader.next("[a-zA-Z]").charAt(0);
Configurar escáner:
Después de esto
reader.next()
, devolverá una cadena de un solo carácter.fuente
No hay un método API para obtener un personaje del escáner. Debería obtener el String usando
scanner.next()
e invocar elString.charAt(0)
método en el String devuelto.Solo para estar seguro con espacios en blanco, también puede llamar primero
trim()
a la cadena para eliminar los espacios en blanco.fuente
reader.next()
Ya no le daría la secuencia a partir del primer carácter no blanco?Hay tres formas de abordar este problema:
Llame
next()
al escáner y extraiga el primer carácter de la cadena (por ejemplocharAt(0)
). Si desea leer el resto de la línea como caracteres, repita los caracteres restantes en la cadena. Otras respuestas tienen este código.Use
setDelimiter("")
para establecer el delimitador en una cadena vacía. Esto haránext()
que se tokenice en cadenas que tengan exactamente un carácter de largo. Entonces puede llamar repetidamentenext().charAt(0)
para iterar los caracteres. ¡Luego puede establecer el delimitador en su valor original y reanudar el escaneo de la manera normal!Use la API Reader en lugar de la API Scanner. El
Reader.read()
método entrega una lectura de un solo carácter de la secuencia de entrada. Por ejemplo:Cuando lees desde la consola a través de
System.in
, el sistema operativo almacena la entrada en la memoria intermedia y solo se "libera" a la aplicación cuando el usuario escribe ENTER. Entonces, si tiene la intención de que su aplicación responda a golpes de teclado individuales, esto no va a funcionar. Tendría que hacer algunas cosas de código nativo específicas del sistema operativo para desactivar o evitar el almacenamiento en línea para la consola en el nivel del sistema operativo.Referencia:
fuente
Puede resolver este problema, de "capturar la entrada del teclado de un carácter a la vez" de manera muy simple. Sin tener que usar un escáner todo y tampoco borrar el búfer de entrada como un efecto secundario, al usar esto.
Si todo lo que necesita es la misma funcionalidad que la función "getChar ()" del lenguaje C, esto funcionará muy bien. La gran ventaja de "System.in.read ()" es que el búfer no se borra después de cada char su captura. Entonces, si aún necesita toda la entrada de los usuarios, aún puede obtener el resto del búfer de entrada. La
"char c = scanner.next().charAt(0);"
forma toma el char pero borrará el búfer.Espero que esto sea útil, y buena suerte! PD: Lo siento, sé que esta es una publicación anterior, pero espero que mi respuesta traiga una nueva perspectiva y pueda ayudar a otras personas que también tienen este problema.
fuente
Esto en realidad no funciona:
Hay algunas buenas explicaciones y referencias en esta pregunta: ¿Por qué la clase Scanner no tiene un método nextChar? "Un escáner divide su entrada en tokens usando un patrón delimitador", que es bastante abierto. Por ejemplo cuando se usa esto
para esta línea de entrada "(1 + 9) / (3 - 1) + 6 - 2" la llamada al siguiente devuelve "(1", c se establecerá en '(', y terminará perdiendo el ' 1 'en la próxima llamada a next ()
Normalmente, cuando quieres obtener un personaje, te gustaría ignorar los espacios en blanco. Esto funcionó para mí:
Referencia: expresiones regulares para que coincida con un solo personaje que es cualquier cosa menos un espacio
fuente
"[^\\s]" === "\\S"
La mejor manera de tomar la entrada de un personaje en la clase Scanner es:
fuente
fuente
Pruebe esto: char c = S.nextLine (). CharAt (0);
fuente
Debe usar su lector de entrada personalizado para obtener resultados más rápidos en lugar de extraer el primer carácter de la lectura de String. Enlace para ScanReader personalizado y explicación: https://gist.github.com/nik1010/5a90fa43399c539bb817069a14c3c5a8
Código para escanear Char:
fuente
Hay dos enfoques, puede tomar exactamente un personaje o estrictamente un carácter. Cuando usa exactamente, el lector tomará solo el primer carácter, independientemente de cuántos caracteres ingrese.
Por ejemplo:
Cuando ingresa un conjunto de caracteres como entrada, diga "abcd", el lector considerará solo el primer carácter, es decir, la letra 'a'
Pero cuando se usa estrictamente, la entrada debe ser solo un carácter. Si la entrada tiene más de un carácter, el lector no tomará la entrada.
Suponga que ingresa la entrada "abcd", no se toma ninguna entrada y la variable c tendrá un valor nulo.
fuente
Para obtener solo un carácter char c = reader.next ("."). CharAt (0);
fuente
fuente
Debería obtener el String usando scanner.next () e invocar el método String.charAt (0) en el String devuelto.
Ejemplo:
salida
fuente
solo necesita escribir esto para obtener valor en el tipo char.
fuente
fuente
Prueba esto
fuente
Por cierto, no puedes tomar un char directamente como entrada. Como puede ver arriba, primero se toma una Cadena y luego el CharAt (0); se encuentra y se almacena
fuente
Solo usa...
Esto obtiene el primer carácter de la siguiente entrada.
fuente
Podrías usar la conversión de texto:
De esta manera, tomará la entrada en String debido a la función 'next ()' pero luego se convertirá en carácter debido al 'char' mencionado entre paréntesis.
Este método de conversión de tipo de datos al mencionar el tipo de datos de destino entre paréntesis se denomina typecating. Funciona para mí, espero que funcione para ti :)
fuente
String
a unachar
.Para encontrar el índice de un personaje en una picadura dada, puede usar este código:
fuente
La forma más fácil es, primero cambie la variable a una Cadena y acepte la entrada como una cadena. Luego puede controlar en función de la variable de entrada con una instrucción if-else o switch de la siguiente manera.
fuente