Ta en char-input fra skanneren
Jeg prøver å finne en måte å ta en char
input fra tastaturet.
Jeg prøvde å bruke:
Scanner reader = new Scanner(System.in);
char c = reader.nextChar();
Denne metoden finnes ikke.
Jeg prøvde å ta c
som en String
. Likevel ville det ikke alltid fungere i alle tilfeller, siden den andre metoden jeg kaller fra min metode krever en char
som input. Derfor må jeg finne en måte å eksplisitt ta en char som input.
Noen hjelp?
112
3
Du kan ta det første tegnet fra
Scanner.next
:For å forbruke nøyaktig ett tegn du kan bruke:
For å forbruke nøyaktig ett tegn du kan bruke:
Det finnes ingen API-metode for å hente et tegn fra skanneren. Du bør hente strengen ved hjelp av
scanner.next()
og påkalleString.charAt(0)
-metoden på den returnerte strengen.Bare for å være sikker med mellomrom kan du også først kalle
trim()
på strengen for å fjerne eventuelle mellomrom.Det er tre måter å nærme seg dette problemet på:
Kall
next()
på skanneren, og trekk ut det første tegnet i strengen (f.eks.charAt(0)
) Hvis du vil lese resten av linjen som tegn, itererer du over de gjenværende tegnene i strengen. Andre svar har denne koden.Bruk
setDelimiter("")
for å sette skilletegnet til en tom streng. Dette vil føre til atnext()
tokenizes til strenger som er nøyaktig ett tegn lange. Så da kan du gjentatte ganger kallenext().charAt(0)
for å iterere tegnene. Du kan deretter sette skilletegnet til den opprinnelige verdien og fortsette skanningen på vanlig måte!Bruk leser-API-et i stedet for skanner-API-et. Metoden
Reader.read()
leverer et enkelt tegn lest fra inndatastrømmen. For eksempelNår du leser fra konsollen via
System.in
, blir inndataene vanligvis bufret av operativsystemet, og bare "frigitt" til applikasjonen når brukeren skriver ENTER. Så hvis du har tenkt at applikasjonen din skal svare på individuelle tastetrykk, kommer dette ikke til å fungere. Du må gjøre noen OS-spesifikke innfødte kodeting for å slå av eller omgå linjebuffering for konsoll på OS-nivå.Referanse: