Neem een tekeninvoer van de scanner

Ik probeer een manier te vinden om een charinvoer van het toetsenbord te krijgen.

Ik heb geprobeerd het volgende te gebruiken:

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

Deze methode bestaat niet.

Ik heb geprobeerd cals een Stringte gebruiken. Toch zou het niet altijd in alle gevallen werken, aangezien de andere methode die ik aanroep vanuit mijn methode een charals invoer vereist. Daarom moet ik een manier vinden om expliciet een char als invoer te nemen.

Heeft u hulp?


Antwoord 1, autoriteit 100%

Je zou het eerste teken van Scanner.nextkunnen nemen:

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

Als u precieséén teken wilt gebruiken, kunt u het volgende gebruiken:

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

Als u striktéén teken wilt gebruiken, kunt u het volgende gebruiken:

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

Antwoord 2, autoriteit 33%

Scanner instellen:

reader.useDelimiter("");

Hierna zal reader.next()een string van één teken teruggeven.


Antwoord 3, autoriteit 11%

Er is geen API-methode om een personage uit de scanner te halen. U moet de String verkrijgen met behulp van scanner.next()en de methode String.charAt(0)aanroepen op de geretourneerde String.

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

Voor de zekerheid met spaties kun je ook eerst trim()aanroepen op de string om eventuele spaties te verwijderen.

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

Antwoord 4, autoriteit 8%

Er zijn drie manieren om dit probleem aan te pakken:

  • Bel next()op de scanner en extraheer het eerste teken van de tekenreeks (bijv. charAt(0)) Als u de rest wilt lezen van de regel als tekens, herhaal dan de resterende tekens in de tekenreeks. Andere antwoorden hebben deze code.

  • Gebruik setDelimiter("")om het scheidingsteken in te stellen op een lege tekenreeks. Dit zorgt ervoor dat next()tokeniseert in strings die precies één teken lang zijn. Dus dan kun je herhaaldelijknext().charAt(0)aanroepen om de karakters te herhalen. U kunt dan het scheidingsteken op de oorspronkelijke waarde instellen en het scannen op de normale manier hervatten!

  • Gebruik de Reader API in plaats van de Scanner API. De methode Reader.read()levert een enkel teken dat uit de invoerstroom wordt gelezen. Bijvoorbeeld:

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

Als je vanaf de console leest via System.in, wordt de invoer doorgaans gebufferd door het besturingssysteem en alleen “vrijgegeven” aan de applicatie wanneer de gebruiker ENTER typt. Dus als u van plan bent uw toepassing te laten reageren op individuele toetsaanslagen, gaat dit niet werken. Je zou wat OS-specifieke native code-dingen moeten doen om lijnbuffering voor console op OS-niveau uit te schakelen of te omzeilen.

Referentie:


Antwoord 5, autoriteit 3%

Je kunt dit probleem, van “het invoeren van toetsenbordinvoer één teken tegelijk” heel eenvoudig oplossen. Zonder dat je een Scanner all hoeft te gebruiken en ook niet de invoerbuffer leegmaakt als bijwerking, door dit te gebruiken.

char c = (char)System.in.read();

Als alles wat je nodig hebt dezelfde functionaliteit is als de C-taal “getChar()”-functie, dan werkt dit prima. Het grote voordeel van de “System.in.read()” is dat de buffer niet wordt leeggemaakt na elke char die je grijpt. Dus als je nog steeds alle gebruikersinvoer nodig hebt, kun je de rest nog steeds uit de invoerbuffer halen. De "char c = scanner.next().charAt(0);"manier pakt de char wel, maar zal de buffer wissen.

// Java program to read character without using Scanner
public class Main
{
    public static void main(String[] args)
    {
        try {
            String input = "";
            // Grab the First char, also wait for user input if the buffer is empty.
            // Think of it as working just like getChar() does in C.
            char c = (char)System.in.read();
            while(c != '\n') {
                //<do your magic you need to do with the char here>
                input += c; // <my simple magic>
                //then grab the next char
                c = (char)System.in.read();
            }
            //print back out all the users input
            System.out.println(input);
        } catch (Exception e){
            System.out.println(e);
        }
    }
}  

Ik hoop dat dit nuttig is, en veel succes! PS Sorry, ik weet dat dit een ouder bericht is, maar ik hoop dat mijn antwoord nieuwe inzichten oplevert en andere mensen kan helpen die ook dit probleem hebben.


Antwoord 6, autoriteit 2%

Dit werkt eigenlijk niet:

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

Er zijn enkele goede verklaringen en verwijzingen in deze vraag:
Waarom heeft de Scanner-klasse geen nextChar-methode?
“Een scanner breekt zijn invoer in tokens met behulp van een scheidingstekenpatroon”, wat vrij open is. Bijvoorbeeld bij gebruik van deze

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

voor deze invoerregel
“(1 + 9) / (3 – 1) + 6 – 2”
de aanroep naar volgende retourneert “(1”, c wordt ingesteld op ‘(‘, en u verliest de ‘1’ bij de volgende aanroep naar volgende()

Als je een teken wilt krijgen, wil je meestal de witruimte negeren. Dit werkte voor mij:

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

Referentie:
regex om een enkel teken te matchen dat alles behalve een spatie


Antwoord 7

De beste manier om een teken in de Scanner-klasse in te voeren is:

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

Antwoord 8

U moet uw aangepaste invoerlezer gebruiken voor snellere resultaten in plaats van het eerste teken te extraheren uit het lezen van String.
Link voor Custom ScanReader en uitleg: https://gist.github.com/nik1010/5a90fa43399c539bb817069a14c3c5a8

Code voor scannen Char:

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

Antwoord 9

Er zijn twee benaderingen: u kunt exactéén teken gebruiken of striktéén teken.
Wanneer u precies gebruikt, zal de lezer alleen het eerste teken gebruiken, ongeacht het aantal tekens dat u invoert.

Bijvoorbeeld:

import java.util.Scanner;  
public class ReaderExample {  
    public static void main(String[] args) {  
        try {  
        Scanner reader = new Scanner(System.in);
        char c = reader.findInLine(".").charAt(0);
            reader.close();  
            System.out.print(c);
        } catch (Exception ex) {  
            System.out.println(ex.getMessage());  
        }
    }  
}  

Als je een set tekens als invoer geeft, zeg “abcd”, zal de lezer alleen het eerste teken in overweging nemen, d.w.z. de letter ‘a’

Maar als je strikt gebruikt, zou de invoer slechts één teken moeten zijn. Als de invoer uit meer dan één teken bestaat, zal de lezer de invoer niet aannemen

import java.util.Scanner;  
public class ReaderExample {  
    public static void main(String[] args) {  
        try {  
        Scanner reader = new Scanner(System.in);
        char c = reader.next(".").charAt(0);
            reader.close();  
            System.out.print(c);
        } catch (Exception ex) {  
            System.out.println(ex.getMessage());  
        }
    }  
}  

Stel dat u “abcd” invoert, wordt er geen invoer genomen en heeft de variabele cde waarde Null.


Antwoord 10

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

Om slechts één teken te krijgen char c = reader.next(".").charAt(0);


Antwoord 11

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

Antwoord 12

Probeer dit:
char c = s.nextline (). Charat (0);


Antwoord 13

U moet de tekenreeks krijgen met Scanner.NEXT () en BOEK STRING.CHARAT (0) Methode op de geretourneerde tekenreeks.
Exmple:

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

Uitgang

Enter a character: 
a
You have entered: a

Antwoord 14

U hoeft dit alleen maar te schrijven voor het krijgen van waarde in Char Type.

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

Antwoord 15

Eenvoudige oplossing om een ​​charter uit de gebruikersinvoer te lezen.
Lees een tekenreeks. Gebruik vervolgens Charat (0) over string

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

Dat is het.


Antwoord 16

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

Antwoord 17

Gebruik gewoon…

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

Dit krijgt het eerste teken van de volgende invoer.


Antwoord 18

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

Antwoord 19

Probeer dit

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

Antwoord 20

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

Trouwens, je kunt een char niet direct als invoer nemen. Zoals je hierboven kunt zien, wordt eerst een String genomen en vervolgens de charAt(0); wordt gevonden en opgeslagen


Antwoord 21

Je zou typecasting kunnen gebruiken:

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

Op deze manier krijg je invoer in String vanwege de functie ‘next()’ maar dan wordt het omgezet in teken vanwege het ‘char’ dat tussen haakjes wordt vermeld.

Deze methode van conversie van gegevenstype door het gegevenstype van de bestemming tussen haakjes te vermelden, wordt typecating genoemd. Het werkt voor mij, ik hoop dat het voor jou werkt 🙂


Antwoord 22

Om de index van een karakter in een bepaalde steek te vinden, kun je deze code gebruiken:

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

Antwoord 23

De eenvoudigste manier is, verander eerst de variabele op een tekenreeks en accepteer de invoer als een tekenreeks. Dan kunt u besturen op basis van de invoervariabele met een IF-else of schakeloverzicht als volgt.

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

Other episodes