Ich versuche einen Weg zu finden, um eine char
Eingabe von der Tastatur zu übernehmen.
Ich habe versucht:
Scanner reader = new Scanner(System.in);
char c = reader.nextChar();
Diese Methode existiert nicht.
Ich habe versucht, c
als String
. Dies würde jedoch nicht immer in jedem Fall funktionieren, da für die andere Methode, die ich von meiner Methode aus aufrufe, char
eine Eingabe erforderlich ist . Daher muss ich einen Weg finden, ein Zeichen explizit als Eingabe zu verwenden.
Irgendeine Hilfe?
java
input
char
java.util.scanner
Ralph
quelle
quelle
char c = reader.next("[a-zA-Z]").charAt(0);
Scanner einrichten:
Danach
reader.next()
wird eine einstellige Zeichenfolge zurückgegeben.quelle
Es gibt keine API-Methode, um ein Zeichen vom Scanner abzurufen. Sie sollten den String mit der Methode
scanner.next()
returnString.charAt(0)
für den zurückgegebenen String abrufen und aufrufen .trim()
Um mit Whitespaces sicher zu sein, können Sie auch zuerst die Zeichenfolge aufrufen , um Whitespaces zu entfernen.quelle
reader.next()
schon die Zeichenfolge geben, die mit dem ersten nicht weißen Zeichen beginnt?Es gibt drei Möglichkeiten, um dieses Problem anzugehen:
Rufen Sie
next()
den Scanner auf und extrahieren Sie das erste Zeichen der Zeichenfolge (z. B.charAt(0)
). Wenn Sie den Rest der Zeile als Zeichen lesen möchten, durchlaufen Sie die verbleibenden Zeichen in der Zeichenfolge. Andere Antworten haben diesen Code.Verwenden Sie
setDelimiter("")
diese Option , um das Trennzeichen auf eine leere Zeichenfolge festzulegen. Dies führtnext()
zu einer Tokenisierung in Zeichenfolgen, die genau ein Zeichen lang sind. Dann können Sie wiederholt aufrufennext().charAt(0)
, um die Zeichen zu wiederholen . Sie können dann das Trennzeichen auf den ursprünglichen Wert setzen und den Scanvorgang auf normale Weise fortsetzen!Verwenden Sie die Reader-API anstelle der Scanner-API. Die
Reader.read()
Methode liefert ein einzelnes Zeichen, das aus dem Eingabestream gelesen wird. Beispielsweise:Wenn Sie von der Konsole über lesen
System.in
, wird die Eingabe normalerweise vom Betriebssystem gepuffert und nur dann für die Anwendung "freigegeben", wenn der Benutzer ENTER eingibt. Wenn Sie also beabsichtigen, dass Ihre Anwendung auf einzelne Tastaturanschläge reagiert, funktioniert dies nicht. Sie müssten einige betriebssystemspezifische native Code-Aufgaben ausführen, um die Zeilenpufferung für die Konsole auf Betriebssystemebene zu deaktivieren oder zu umgehen.Referenz:
quelle
Sie können dieses Problem lösen, indem Sie ganz einfach "Tastatureingaben einzeln" abrufen. Ohne einen Scanner alle verwenden zu müssen und auch den Eingabepuffer nicht als Nebeneffekt zu löschen, verwenden Sie diesen.
Wenn Sie nur die gleiche Funktionalität wie die C-Sprache "getChar ()" benötigen, funktioniert dies hervorragend. Der große Vorteil von "System.in.read ()" ist, dass der Puffer nicht nach jedem Zeichen gelöscht wird. Wenn Sie also immer noch alle Benutzereingaben benötigen, können Sie den Rest aus dem Eingabepuffer abrufen. Der
"char c = scanner.next().charAt(0);"
Weg greift zwar nach dem Zeichen, löscht aber den Puffer.Hoffe das hilfreich und viel Glück! PS Tut mir leid, ich weiß, dass dies ein älterer Beitrag ist, aber ich hoffe, dass meine Antwort neue Erkenntnisse bringt und anderen Menschen helfen könnte, die ebenfalls dieses Problem haben.
quelle
Das funktioniert eigentlich nicht:
Diese Frage enthält einige gute Erklärungen und Referenzen: Warum verfügt die Scannerklasse nicht über eine nextChar-Methode? "Ein Scanner unterteilt seine Eingabe mithilfe eines Begrenzungsmusters in Token", was ziemlich offen ist. Zum Beispiel, wenn Sie dies verwenden
Für diese Eingabezeile "(1 + 9) / (3 - 1) + 6 - 2" wird der Aufruf zum nächsten zurückgegeben "(1", c wird auf "(" gesetzt, und Sie verlieren am Ende das " 1 'beim nächsten Aufruf zum nächsten ()
Wenn Sie einen Charakter erhalten möchten, möchten Sie normalerweise Leerzeichen ignorieren. Das hat bei mir funktioniert:
Referenz: Regex für ein einzelnes Zeichen, das alles andere als ein Leerzeichen ist
quelle
"[^\\s]" === "\\S"
Der beste Weg, um ein Zeichen in der Scannerklasse einzugeben, ist:
quelle
quelle
Versuchen Sie Folgendes: char c = S.nextLine (). CharAt (0);
quelle
Sie sollten Ihren benutzerdefinierten Eingabeleser verwenden, um schnellere Ergebnisse zu erzielen, anstatt das erste Zeichen aus dem Lesen von String zu extrahieren. Link für Custom ScanReader und Erläuterung: https://gist.github.com/nik1010/5a90fa43399c539bb817069a14c3c5a8
Code zum Scannen von Char:
quelle
Es gibt zwei Ansätze, können Sie entweder genau ein Zeichen oder streng ein Zeichen. Wenn Sie genau verwenden, nimmt der Leser nur das erste Zeichen, unabhängig davon, wie viele Zeichen Sie eingeben.
Beispielsweise:
Wenn Sie eine Reihe von Zeichen als Eingabe angeben, z. B. "abcd", berücksichtigt der Leser nur das erste Zeichen, dh den Buchstaben "a".
Wenn Sie jedoch streng verwenden, sollte die Eingabe nur ein Zeichen sein. Wenn die Eingabe mehr als ein Zeichen umfasst, nimmt der Leser die Eingabe nicht entgegen
Angenommen, Sie geben die Eingabe "abcd" ein, es wird keine Eingabe vorgenommen, und die Variable c hat den Wert Null.
quelle
Um nur ein Zeichen zu erhalten char c = reader.next ("."). CharAt (0);
quelle
quelle
Sie sollten den String mit scanner.next () abrufen und die String.charAt (0) -Methode für den zurückgegebenen String aufrufen.
Beispiel:
Ausgabe
quelle
Sie müssen dies nur schreiben, um den Wert vom Typ char zu erhalten.
quelle
quelle
Versuche dies
quelle
Übrigens können Sie ein Zeichen nicht direkt als Eingabe verwenden. Wie Sie oben sehen können, wird zuerst ein String und dann das Zeichen (0) verwendet. gefunden und gespeichert wird
quelle
Benutz einfach...
Dies erhält das erste Zeichen der nächsten Eingabe.
quelle
Sie könnten Typecasting verwenden:
Auf diese Weise nehmen Sie aufgrund der Funktion 'next ()' Eingaben in String vor, diese werden jedoch aufgrund des in den Klammern angegebenen 'char' in Zeichen umgewandelt.
Diese Methode zur Konvertierung des Datentyps durch Angabe des Zieldatentyps in Klammern wird als Typisierung bezeichnet. Es funktioniert für mich, ich hoffe es funktioniert für dich :)
quelle
String
bis a nicht typisierenchar
.Um den Index eines Zeichens in einem bestimmten Stich zu finden, können Sie diesen Code verwenden:
quelle
Am einfachsten ist es, zuerst die Variable in einen String zu ändern und die Eingabe als String zu akzeptieren. Anschließend können Sie basierend auf der Eingabevariablen mit einer if-else- oder switch-Anweisung wie folgt steuern.
quelle