Prendre une entrée char du Scanner

j'essaie de trouver un moyen de prendre une entrée char du clavier.

j'ai essayé d'utiliser:

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

Cette méthode n'existe pas.

j'ai essayé de prendre c comme un String . Pourtant, cela ne fonctionnerait pas toujours dans tous les cas, puisque l'autre méthode que j'appelle de ma méthode nécessite un char comme entrée. Je dois donc trouver un moyen de prendre explicitement un char comme une entrée.

de l'aide?

96
demandé sur Radiodef 2012-12-19 02:42:20

19 réponses

vous pouvez prendre le premier caractère de Scanner.next :

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

consommer exactement un caractère, vous pouvez utiliser:

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

consommer strictement un caractère, vous pouvez utiliser:

char c = reader.next(".").charAt(0);
138
répondu Reimeus 2014-04-15 20:58:51

le programme d'Installation du scanneur:

reader.useDelimiter("");

après ce reader.next() retournera une chaîne à un seul caractère.

45
répondu hoat4 2015-01-18 08:42:26

il n'y a pas de méthode API pour obtenir un caractère du Scanner. Vous devriez obtenir la chaîne en utilisant scanner.next() et invoquer la méthode String.charAt(0) sur la chaîne retournée.

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

juste pour être sûr avec des espaces blancs, vous pouvez aussi d'abord appeler trim() sur la chaîne pour enlever les espaces blancs.

Scanner reader = new Scanner(System.in);
char c = reader.next().trim().charAt(0);
16
répondu PermGenError 2015-04-06 00:51:38

Il y a trois façons d'aborder ce problème:

  • appeler next() sur le Scanner, et extraire le premier caractère de la chaîne (par exemple charAt(0) ) si vous voulez lire le reste de la ligne comme des caractères, itérez sur les caractères restants dans la chaîne. D'autres réponses ont ce code.

  • utilisez setDelimiter("") pour placer le délimiteur sur une chaîne vide. Ce sera la cause de next() pour marquer dans les chaînes exactement un caractère. Alors vous pouvez à plusieurs reprises appeler next().charAt(0) pour itérer les caractères. Vous pouvez alors définir le délimiteur à sa valeur originale et reprendre la numérisation de la manière normale!

  • utilisez L'API de lecteur au lieu de l'API de Scanner. La méthode Reader.read() fournit un caractère simple lu à partir du flux d'entrée. Par exemple:

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

lorsque vous lisez à partir de la console via System.in , l'entrée est généralement tamponnée par le système d'exploitation, et seulement "libéré" à l'application lorsque les types d'utilisateurs entrent. Donc, si vous voulez que votre application réponde à des coups de clavier individuels, cela ne va pas fonctionner. Vous auriez besoin de faire quelques trucs de code natif spécifiques à L'OS pour désactiver ou travailler autour de la mise en tampon de ligne pour la console au niveau de L'OS.

référence:

9
répondu Stephen C 2018-01-13 00:02:53

Cela ne fonctionne pas:

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

il y a quelques bonnes explications et références dans cette question: pourquoi la classe Scanner n'a pas une méthode nextChar? "Un Scanner brise son entrée en jetons en utilisant un motif de délimiteur", ce qui est assez ouvert. Par exemple en utilisant ce

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

pour cette ligne d'entrée "(1 + 9) / (3 - 1) + 6 - 2" l'appel à la prochaine renvoie "(1", c sera mis à '(', et vous finirez par perdre le " 1 " sur le prochain appel à next()

typiquement quand vous voulez obtenir un caractère que vous voudriez ignorer les espaces. Cela a fonctionné pour moi:

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

référence: regex correspondre à un seul personnage qui est tout sauf un espace

3
répondu gary69 2017-05-23 12:18:22

la meilleure façon de prendre l'entrée d'un caractère dans la classe de Scanner est:

Scanner sca=new Scanner(System.in);
System.out.println("enter a character");
char ch=sca.next().charAt(0);
2
répondu Sahil Gupta 2014-01-14 16:37:17
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");

    }
}
1
répondu HellPreacher 2015-02-15 14:24:24

vous devriez utiliser votre lecteur d'entrée personnalisé pour des résultats plus rapides au lieu d'extraire le premier caractère de la chaîne de lecture. Lien pour le lecteur de scan personnalisé et l'explication: https://gist.github.com/nik1010/5a90fa43399c539bb817069a14c3c5a8

Code pour scanner Char:

BufferedInputStream br=new BufferedInputStream(System.in);
char a= (char)br.read();
1
répondu NIKUNJ KHOKHAR 2017-06-16 06:23:40
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);

    }
}

pour obtenir un seul caractère char C = reader.prochain."(").charAt (0);

0
répondu Rakesh Kumar B 2017-10-16 14:20:05
// 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');
}
}
0
répondu John Born 2018-04-19 17:32:31

vous devriez obtenir la corde en utilisant le scanner.next() et invoquer la Chaîne.méthode charAt (0) sur la chaîne retournée.

Exple:

    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);
            }


        }

sortie

Enter a character: 
a
You have entered: a
0
répondu AbdoCosmos 2018-04-19 19:58:50
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
-1
répondu vishu 2015-04-06 21:55:02

Essayez cette

Scanner scanner=new Scanner(System.in);
String s=scanner.next();
char c=s.charAt(0);
-1
répondu Farhan 2016-08-17 20:30:43

essayez ceci: char C=s. nextLine ().charAt (0);

-1
répondu Harshal Mande 2016-09-14 14:28:28
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

soit dit en passant, vous ne pouvez pas prendre un char directement comme entrée. Comme vous pouvez le voir ci-dessus, une chaîne est d'abord prise puis le charAt(0); est trouvé et stocké

-1
répondu Arafe Zawad Sajid 2016-11-23 02:52:44

utilisez...

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

C'est ça...

-1
répondu Razoowp 2016-12-15 04:02:11

vous pouvez utiliser la typographie:

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

de cette façon, vous prendrez les entrées dans String en raison de la fonction 'next()' mais alors il sera converti en caractère en raison du 'char' mentionné dans les parenthèses.

cette méthode de conversion de type de données en mentionnant le type de données de destination entre parenthèses est appelée typecating. Il fonctionne pour moi, j'espère que cela fonctionne pour u :)

-2
répondu Nihaarika 2016-03-26 20:35:10

Pour trouver l'indice d'un caractère dans une piqûre, vous pouvez utiliser ce code:

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);

    }

}
-3
répondu Robi 2016-06-11 00:39:06

la manière la plus simple est de changer d'abord la variable en une chaîne et d'accepter l'entrée comme une chaîne. Ensuite, vous pouvez contrôler en fonction de la variable d'entrée avec une instruction if-else ou switch comme suit.

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>
}
-7
répondu AndroidShifu 2017-01-18 16:42:32