leer como java input char java.util.scanner

java - como - Tome una entrada de char del Escáner



char en java (19)

Configurar el escáner:

reader.useDelimiter("");

Después de este reader.next() devolverá una cadena de un solo carácter.

Estoy tratando de encontrar una manera de tomar una entrada de char del teclado.

Intenté usar:

Scanner reader = new Scanner(System.in); char c = reader.nextChar();

Este método no existe.

Intenté tomar c como una 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 un char como entrada. Por lo tanto, tengo que encontrar una manera de tomar explícitamente un char como entrada.

¿Alguna ayuda?


Debe utilizar su lector de entrada personalizado para obtener resultados más rápidos en lugar de extraer el primer carácter de la lectura de Cadena. Enlace para Custom ScanReader y explicación: https://gist.github.com/nik1010/5a90fa43399c539bb817069a14c3c5a8

Código para escanear Char:

BufferedInputStream br=new BufferedInputStream(System.in); char a= (char)br.read();


Debería obtener el String utilizando scanner.next () e invocar el método String.charAt (0) en el String devuelto.
Ejemplo:

import java.util.Scanner; public class InputC{ public static void main(String[] args) { // TODO Auto-generated method stub // Declare the object and initialize with // predefined standard input object Scanner scanner = new Scanner(System.in); System.out.println("Enter a character: "); // Character input char c = scanner.next().charAt(0); // Print the read value System.out.println("You have entered: "+c); } }

salida

Enter a character: a You have entered: a


Esto realmente no funciona:

char c = reader.next().charAt(0);

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, al usar esto

c = lineScanner.next().charAt(0);

para esta línea de entrada "(1 + 9) / (3 - 1) + 6 - 2" la llamada a la próxima devuelve "(1", c se establecerá en ''('', y terminarás perdiendo el '' 1 ''en la próxima llamada a siguiente ()

Normalmente, cuando quieres obtener un personaje, quieres ignorar el espacio en blanco. Esto funcionó para mí:

c = lineScanner.findInLine("[^//s]").charAt(0);

Referencia: regex para que coincida con un solo carácter que es cualquier cosa menos un espacio


Hay tres formas de abordar este problema:

  • Llame a next() en el Escáner y extraiga el primer carácter de la Cadena (por ejemplo, charAt(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 provocará que next() convierta tokenize en cadenas que tienen exactamente un carácter de longitud. Entonces puede llamar repetidamente a next().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 método Reader.read() entrega una sola lectura de caracteres de la secuencia de entrada. Por ejemplo:

    Reader reader = new InputStreamReader(System.in); int ch = reader.read(); if (ch != -1) { // check for EOF // we have a character ... }

Cuando lee desde la consola a través de System.in , la entrada normalmente está protegida por el sistema operativo y solo se "libera" a la aplicación cuando el usuario escribe ENTRAR. Entonces, si intenta que su aplicación responda a golpes de teclado individuales, esto no funcionará. Tendría que hacer algunas cosas del código nativo específico del sistema operativo para apagar o trabajar en el buffer de línea para la consola en el nivel del sistema operativo.

Referencia:


La forma más fácil es, primero cambiar la variable a una cadena y aceptar la entrada como una cadena. Luego puede controlar basándose en la variable de entrada con una instrucción if-else o switch de la siguiente manera.

Scanner reader = new Scanner(System.in); String c = reader.nextLine(); switch (c) { case "a": <your code here> break; case "b": <your code here> break; default: <your code here> }


La mejor forma de ingresar datos de un personaje en la clase de escáner es:

Scanner sca=new Scanner(System.in); System.out.println("enter a character"); char ch=sca.next().charAt(0);


No hay un método API para obtener un personaje del Escáner. Debería obtener el String utilizando scanner.next() e invocar el String.charAt(0) en el String devuelto.

Scanner reader = new Scanner(System.in); char c = reader.next().charAt(0);

Solo para estar seguro con espacios en blanco, también podría llamar primero a trim() en la cadena para eliminar cualquier espacio en blanco.

Scanner reader = new Scanner(System.in); char c = reader.next().trim().charAt(0);


Para encontrar el índice de un personaje en un punto específico, puede usar este código:

package stringmethodindexof; import java.util.Scanner; import javax.swing.JOptionPane; /** * * @author ASUS//VERY VERY IMPORTANT */ public class StringMethodIndexOf { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here String email; String any; //char any; //any=JOptionPane.showInputDialog(null,"Enter any character or string to find out its INDEX NUMBER").charAt(0); //THE AVOBE LINE IS FOR CHARACTER INPUT LOL //System.out.println("Enter any character or string to find out its INDEX NUMBER"); //Scanner r=new Scanner(System.in); // any=r.nextChar(); email = JOptionPane.showInputDialog(null,"Enter any string or anything you want:"); any=JOptionPane.showInputDialog(null,"Enter any character or string to find out its INDEX NUMBER"); int result; result=email.indexOf(any); JOptionPane.showMessageDialog(null, result); } }


Podría usar typecasting:

Scanner sc= new Scanner(System.in); char a=(char) sc.next();

De esta forma, tomará la entrada en Cadena debido a la función ''siguiente ()'', pero luego se convertirá en carácter debido al ''carácter'' mencionado en los corchetes.

Este método de conversión del tipo de datos mencionando el tipo de datos de destino entre paréntesis se llama typecating. Funciona para mí, espero que funcione para ti :)


Podrías tomar el primer personaje de Scanner.next :

char c = reader.next().charAt(0);

Para consumir exactamente un personaje, puede usar:

char c = reader.findInLine(".").charAt(0);

Para consumir estrictamente un personaje, puede usar:

char c = reader.next(".").charAt(0);


Prueba esto

Scanner scanner=new Scanner(System.in); String s=scanner.next(); char c=s.charAt(0);


Pruebe esto: char c = S.nextLine (). CharAt (0);


Solo usa...

Scanner keyboard = new Scanner(System.in);<br> char c = keyboard.next().charAt(0);

Eso es...


// Use a BufferedReader to read characters from the console. import java.io.*; class BRRead { public static void main(String args[]) throws IOException { char c; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Enter characters, ''q'' to quit."); // read characters do { c = (char) br.read(); System.out.println(c); } while(c != ''q''); } }


Scanner key = new Scanner(System.in); //shortcut way char firstChar=key.next().charAt(0); //how it works; /*key.next() takes a String as input then, charAt method is applied on that input (String) with a parameter of type int (position) that you give to get that char at that position. You can simply read it out as: the char at position/index 0 from the input String (through the Scanner object key) is stored in var. firstChar (type char) */ //you can also do it in a bit elabortive manner to understand how it exactly works String input=key.next(); // you can also write key.nextLine to take a String with spaces also char firstChar=input.charAt(0); char charAtAnyPos= input.charAt(pos); // in pos you enter that index from where you want to get the char from

Por cierto, no puedes tomar un carácter directamente como entrada. Como puede ver arriba, primero se toma una Cadena luego la charAt (0); es encontrado y almacenado


import java.io.*; class abc // enter class name (here abc is class name) { public static void main(String arg[]) throws IOException // can also use Exception { BufferedReader z = new BufferedReader(new InputStreamReader(System.in)); char ch = (char) z.read(); } // PSVM } // class


import java.util.Scanner; public class userInput{ public static void main(String[] args){ // Creating your scanner with name kb as for keyBoard Scanner kb = new Scanner(System.in); String name; int age; char bloodGroup; float height; // Accepting Inputs from user System.out.println("Enter Your Name"); name = kb.nextLine(); // for entire line of String including spaces System.out.println("Enter Your Age"); age = kb.nextInt(); // for taking Int System.out.println("Enter Your BloodGroup : A/B/O only"); bloodGroup = kb.next().charAt(0); // For character at position 0 System.out.println("Enter Your Height in Meters"); height = kb.nextFloat(); // for taking Float value // closing your scanner object kb.close(); // Outputting All System.out.println("Name : " +name); System.out.println("Age : " +age); System.out.println("BloodGroup : " +bloodGroup); System.out.println("Height : " +height+" m"); } }


package Pack; import java.util.Scanner; public class test { public static void main(String[] args) { Scanner reader = new Scanner(System.in); char c = reader.next(".").charAt(0); } }

Para obtener solo un caracter char c = reader.next ("."). CharAt (0);