Ich versuche, eine Möglichkeit zu finden, eine "Char"-Eingabe von der Tastatur zu übernehmen.
Ich habe versucht, mit:
Scanner reader = new Scanner(System.in);
char c = reader.nextChar();
Diese Methode gibt es nicht.
Ich habe versucht, c
als String
zu nehmen. Das würde aber nicht immer funktionieren, da die andere Methode, die ich von meiner Methode aus aufrufe, ein "Zeichen" als Eingabe benötigt. Daher muss ich einen Weg finden, um explizit ein Zeichen als Eingabe zu verwenden.
Kann mir jemand helfen?
Sie könnten das erste Zeichen aus "Scanner.next" übernehmen:
char c = reader.next().charAt(0);
Um exakt ein Zeichen zu verbrauchen, könnte man verwenden:
char c = reader.findInLine(".").charAt(0);
Um streng ein Zeichen zu verbrauchen, könnten Sie verwenden:
char c = reader.next(".").charAt(0);
Es gibt keine API-Methode, um ein Zeichen vom Scanner zu erhalten. Sie sollten die Zeichenfolge mit "scanner.next()" abrufen und die Methode "String.charAt(0)" für die zurückgegebene Zeichenfolge aufrufen.
Scanner reader = new Scanner(System.in);
char c = reader.next().charAt(0);
Um sicher zu gehen, dass keine Leerzeichen vorhanden sind, koennen Sie auch zuerst trim()
auf den String anwenden, um Leerzeichen zu entfernen.
Scanner reader = new Scanner(System.in);
char c = reader.next().trim().charAt(0);
Es gibt drei Möglichkeiten, dieses Problem anzugehen:
Rufen Sie next()
auf dem Scanner auf und extrahieren Sie das erste Zeichen des Strings (z.B. charAt(0)
). Wenn Sie den Rest der Zeile als Zeichen lesen wollen, iterieren Sie über die verbleibenden Zeichen des Strings. Andere Antworten haben diesen Code.
Verwenden Sie setDelimiter("")
, um den Begrenzer auf eine leere Zeichenkette zu setzen. Dies bewirkt, dass next()
in Zeichenketten tokenisiert, die genau ein Zeichen lang sind. Dann können Sie wiederholt next().charAt(0)
aufrufen, um die Zeichen zu iterieren. Anschließend können Sie das Trennzeichen auf seinen ursprünglichen Wert setzen und die Suche auf normale Weise fortsetzen!
Verwenden Sie die Reader-API anstelle der Scanner-API. Die Methode Reader.read()
liefert ein einzelnes gelesenes Zeichen aus dem Eingabestrom. Zum Beispiel:
Reader reader = new InputStreamReader(System.in);
int ch = reader.read();
if (ch != -1) { // Prüfung auf EOF
// wir haben ein Zeichen ...
}
Wenn Sie über System.in
von der Konsole lesen, wird die Eingabe normalerweise vom Betriebssystem gepuffert und erst dann an die Anwendung weitergegeben, wenn der Benutzer ENTER eingibt. Wenn Sie also beabsichtigen, dass Ihre Anwendung auf einzelne Tastenanschläge reagiert, wird dies nicht funktionieren. Sie müssten einige betriebssystemspezifische Funktionen im nativen Code ausführen, um die Zeilenpufferung für die Konsole auf Betriebssystemebene zu deaktivieren oder zu umgehen.
Referenz: