Więcej
Pobierz znak wejściowy z czytnika
Próbuję znaleźć sposób na pobranie danych wejściowych char
z klawiatury.
Próbowałem użyć:
Scanner reader = new Scanner(System.in);
char c = reader.nextChar();
Ta metoda nie istnieje.
Próbowałem wziąć c
jako String
. Jednak nie zawsze zadziałałoby to w każdym przypadku, ponieważ inna metoda, którą wywołuję z mojej metody wymaga char
jako wejścia. Dlatego muszę znaleźć sposób, aby jawnie przyjąć znak jako wejście.
Jakaś pomoc?
112
3
Mógłbyś wziąć pierwszy znak z
Scanner.next
:Aby skonsumować dokładnie jeden znak, mógłbyś użyć:
Aby skonsumować ściśle jedną postać można by użyć:
Nie ma metody API do uzyskania znaku ze skanera. Powinieneś pobrać String używając
scanner.next()
i wywołać metodęString.charAt(0)
na zwróconym Stringu.Aby być bezpiecznym z białymi przestrzeniami, możesz również najpierw wywołać
trim()
na łańcuchu, aby usunąć wszystkie białe przestrzenie.Do tego problemu można podejść na trzy sposoby:
Wywołaj
next()
na skanerze i wyodrębnij pierwszy znak String (np.charAt(0)
) Jeśli chcesz odczytać resztę linii jako znaki, iteruj nad pozostałymi znakami w String. Inne odpowiedzi mają ten kod.Użyj
setDelimiter("")
, aby ustawić ogranicznik na pusty ciąg. To spowoduje, żenext()
tokenizuje do łańcuchów, które mają dokładnie jeden znak długości. Więc wtedy możesz powtarzalnie wywołaćnext().charAt(0)
aby iterować znaki. Następnie możesz ustawić ogranicznik na jego oryginalną wartość i wznowić skanowanie w normalny sposób!Użyj API czytnika zamiast API skanera. Metoda
Reader.read()
dostarcza pojedynczy znak odczytany ze strumienia wejściowego. Na przykład:Kiedy czytasz z konsoli poprzez
System.in
, dane wejściowe są zazwyczaj buforowane przez system operacyjny i tylko "uwalniane" do aplikacji, kiedy użytkownik wpisze ENTER. Więc jeśli zamierzasz, aby twoja aplikacja reagowała na poszczególne uderzenia w klawiaturę, to nie będzie działać. Musiałbyś zrobić kilka specyficznych dla systemu operacyjnego rzeczy w kodzie natywnym, aby wyłączyć lub obejść buforowanie linii dla konsoli na poziomie systemu operacyjnego.Odnośnik: