char über die Konsole?

Wuast

Bekanntes Mitglied
Hallo,
wie kann ich einen einzelnen Char über die Konsole eingeben und auch als char speichern? Da ich diesen später mit einem charAt() in einem String vergleichen möchte und ich einen String nicht mit einem char vergleichen kann (oder?? - zumindest will weder == noch equals), habe ich es z.B. so versucht:

Java:
        // am Anfang erfolge import java.io.InputStreamReader; für die Klasse reader
            
        Reader huntedCharTemp = new InputStreamReader(System.in);
        int characterAsInt = huntedCharTemp.read();
        char huntedchar = (char) characterAsInt;

geht nicht. Mit
Java:
char huntedChar = new java.util.Scanner(System.in).nextChar();
leider auch nicht.

Bin für Hinweise wie immer äußerst dankbar 🙂 LG Yannik
 
Also ich muss ja zugeben, ich würde es mir ganz einfach machen und einfach erstmal mit dem normalen Scanner.nextLine einlesen und dann zum Vergleichen das erste char da rausnehmen:

Java:
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
if (input.charAt(0) == 'A') {
    // ...
}

Der Vorteil, den ich hier sehe, ist, dass du noch mit dem input rumspielen kannst, um zum Beispiel falsche Eingaben zu erkennen. Und dadurch, dass man die Eingabe mit Return bestätigen muss, kann der Benutzer einen eventuellen Tippfehler auch noch korrigieren.
 
Also ich muss ja zugeben, ich würde es mir ganz einfach machen und einfach erstmal mit dem normalen Scanner.nextLine einlesen und dann zum Vergleichen das erste char da rausnehmen:

Java:
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
if (input.charAt(0) == 'A') {
    // ...
}

Der Vorteil, den ich hier sehe, ist, dass du noch mit dem input rumspielen kannst, um zum Beispiel falsche Eingaben zu erkennen. Und dadurch, dass man die Eingabe mit Return bestätigen muss, kann der Benutzer einen eventuellen Tippfehler auch noch korrigieren.
Nun der Gedanke ist, dass ein Programmnutzer einen String und Buchstaben über die Konsole eingeben können soll. Das Programm soll dann in dem String den Buchstaben suchen und angeben, wie oft er vorkommt. Die Suche kann mittels dem charAt und einer Schleife und dem " == " erfolgen denke ich. Nur wie bekomme ich einen Buchstaben (ein char) in eine Variable, die ich dann an die Stelle setzen kann, an der dein 'A' steht?

Hier das, was ich bisher habe:
Java:
String input = new java.util.Scanner(System.in).nextLine();        // Stringeingabe über die Konsole
   
//hier kommt das, womit ich nicht weiter komme
    Reader huntedCharTemp = new InputStreamReader(System.in);    // das ist der Versuch einen
    int characterAsInt = huntedCharTemp.Reader();                // char mittels Konsoleneingabe in
    char huntedchar = (char) characterAsInt;                    // eine Variable zu speichern
//hier endet das, womit ich nicht weiter komme      
       
    int counter = 0;                                            // Zählvariable, um die Anzahl der Buchstaben ausgeben zu können
       
    for (int i = 0; i < input.length(); i++) {
           
        if (input.charAt(i) == huntedChar) {
                counter++;
            }
        }
        System.out.println("Das Eingegebene Wort " + input + " enthält den gesuchten Buchstaben " + huntedChar + counter + " mal!");

=)
 
@Wuast, Du hast @Robertop falsch verstanden. Er meint, Du sollst einfach eine weitere Zeile einlesen und von dieser das erste Zeichen verwenden.

Quick & Dirty:
Java:
Scanner sc = new Scanner(System.in);

System.out.print("Zu durchsuchender Text: ");
String input = sc.nextLine();
System.out.print("Zu suchendes Zeichen: ");
char huntedChar = sc.nextLine().charAt(0);

Dann hast Du einmal in input den zu durchsuchenden Text und einmal in huntedChar das zu suchende Zeichen.
 
Generell auch der wichtige Hinweis:
Die Console in Java kann keine Eingabe von einzelnen Zeichen verarbeiten! Eine Eingabe kann erst gelesen werden, wenn der Anwender die Return Taste gedrückt hat und dann wird die ganze getätigte Eingabe an den Stream gesendet.

Das ist ein wichtiger Punkt. Andere Sprachen bietet hier deutlich mehr. In C wäre das dann ein getch() aus stdio.h, welches einen direkten Tastendruck auswerten kann. (Also Nutzer drückt nur eine Taste z.B. 'a' und diese Eingabe wird sofort gelesen per getch() Aufruf.

Da dies in Java nicht zur Verfügung steht, bleibt also nur das Einlesen von ganzen Strings übrig.
Der Benutzer gibt irgendwas ein und drückt dann Enter. Das Ergebnis ist ein String. Er kann leer sein oder mehrere Zeichen beinhalten. Diese Zeichenkette wird eingelesen. Daran führt erst einmal kein Weg vorbei. (Zumindest was Eingaben angeht. Sobald es um reine Binary Daten geht, sieht es etwas anders aus, aber das interessiert jetzt hier nicht.)

Diesen String kann man dann aber weiter Verarbeiten. Hier wäre Scanner ein Beispiel, das hier dann aus dem String Token bilden kann um die Token dann in unterschiedlichen Typen zu wandeln und so zu lesen.
 
@Wuast, Du hast @Robertop falsch verstanden. Er meint, Du sollst einfach eine weitere Zeile einlesen und von dieser das erste Zeichen verwenden.

Quick & Dirty:
Java:
Scanner sc = new Scanner(System.in);

System.out.print("Zu durchsuchender Text: ");
String input = sc.nextLine();
System.out.print("Zu suchendes Zeichen: ");
char huntedChar = sc.nextLine().charAt(0);

Dann hast Du einmal in input den zu durchsuchenden Text und einmal in huntedChar das zu suchende Zeichen.
Wow, ja klar.. 🙂 Manchmal habe ich Tomaten auf den Augen und einen Furz im Gehirn... Danke fürs übersetzen und danke Robo für den Tipp.
Generell auch der wichtige Hinweis:
Die Console in Java kann keine Eingabe von einzelnen Zeichen verarbeiten! [...]

Der Benutzer gibt irgendwas ein und drückt dann Enter. Das Ergebnis ist ein String. Er kann leer sein oder mehrere Zeichen beinhalten. Diese Zeichenkette wird eingelesen. Daran führt erst einmal kein Weg vorbei. (Zumindest was Eingaben angeht. Sobald es um reine Binary Daten geht, sieht es etwas anders aus, aber das interessiert jetzt hier nicht.)

Diesen String kann man dann aber weiter Verarbeiten. Hier wäre Scanner ein Beispiel, das hier dann aus dem String Token bilden kann um die Token dann in unterschiedlichen Typen zu wandeln und so zu lesen.
Super Hinweis. Dass es ohne Enter nicht geht habe ich gemerkt, aber das es immer ein String ist war mir nicht klar. D.h. dann wenn ich einen (System.in).nextInt() oder .nextDouble habe, ist es auch ein String und wird dann umgewandelt von der Klasse Scanner?!
 

Zurück
Oben