de-vraag
  • Pytania
  • Tagi
  • Użytkownicy
Powiadomienia
Nagrody
Rejestracja
Po zarejestrowaniu się, będziesz otrzymywać powiadomienia o odpowiedziach i komentarzach do swoich pytań.
Zaloguj się
Brak tłumaczeń pasujących do Twojego wyszukiwania Jeśli masz już konto, zaloguj się, aby sprawdzić nowe powiadomienia.
Za dodane pytania, odpowiedzi i komentarze przewidziane są nagrody.
Więcej
Źródło
Edytuj
 Ralph
Ralph
Question

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 2012-12-18T22:42:20+00:00 3
 Radiodef
Radiodef
Edytowane pytanie 6. kwietnia 2015 в 12:54
Programowanie
java
input
java.util.scanner
char
To pytanie ma 1 odpowiedź w języku angielskim, aby je przeczytać zaloguj się na swoje konto.
Solution / Answer
 Reimeus
Reimeus
18. grudnia 2012 в 10:43
2012-12-18T22:43:34+00:00
Więcej
Źródło
Edytuj
#18020226

Mógłbyś wziąć pierwszy znak z Scanner.next:

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

Aby skonsumować dokładnie jeden znak, mógłbyś użyć:

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

Aby skonsumować ściśle jedną postać można by użyć:

char c = reader.next(".").charAt(0);
 Reimeus
Reimeus
Edytowana odpowiedź 15. kwietnia 2014 в 8:58
154
0
 PermGenError
PermGenError
18. grudnia 2012 в 10:43
2012-12-18T22:43:38+00:00
Więcej
Źródło
Edytuj
#18020227

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.

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

Aby być bezpiecznym z białymi przestrzeniami, możesz również najpierw wywołać trim() na łańcuchu, aby usunąć wszystkie białe przestrzenie.

Scanner reader = new Scanner(System.in);
char c = reader.next().trim().charAt(0);
 Radiodef
Radiodef
Edytowana odpowiedź 6. kwietnia 2015 в 12:51
16
0
Stephen C
Stephen C
18. grudnia 2012 в 11:15
2012-12-18T23:15:24+00:00
Więcej
Źródło
Edytuj
#18020228

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, że next() 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:

    Reader reader = new InputStreamReader(System.in);
    int ch = reader.read();
    if (ch != -1) { // sprawdź czy nie ma EOF
        // mamy znak ...
    }

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:

  • https://stackoverflow.com/questions/1066318/how-to-read-a-single-char-from-the-console-in-java-as-the-user-types-it
Stephen C
Stephen C
Edytowana odpowiedź 13. stycznia 2018 в 12:02
11
0
Dodaj pytanie
Kategorie
Wszystkie
Technologia
Kultura / Rekreacja
Życie / Sztuka
Nauka
Profesjonalny
Biznes
Użytkownicy
Wszystkie
Nowy
Popularny
1
365
Zarejestrowany 1 dzień temu
2
True Image
Zarejestrowany 1 dzień temu
3
archana agarwal
Zarejestrowany 3 dni temu
4
Maxim Zhilyaev
Zarejestrowany 6 dni temu
5
adambotsfford adambotsfford
Zarejestrowany 1 tydzień temu
DE
EL
ES
FR
ID
IT
JA
NL
PL
PT
RO
RU
SL
ZH
© de-vraag 2022
Źródło
stackoverflow.com
na podstawie licencji cc by-sa 3.0 z przypisaniem