Ik probeer een manier te vinden om een char
input van het toetsenbord te nemen.
Ik heb geprobeerd met:
Scanner reader = new Scanner(System.in);
char c = reader.nextChar();
Deze methode bestaat niet.
Ik heb geprobeerd c
als een String
te nemen. Toch zou dat niet altijd werken, omdat de andere methode die ik aanroep vanuit mijn methode een char
als invoer vereist. Daarom moet ik een manier vinden om expliciet een char als invoer te nemen.
Iemand hulp?
Je zou het eerste teken uit Scanner.next
kunnen halen:
char c = reader.next().charAt(0);
Om exact één teken te consumeren zou je kunnen gebruiken:
char c = reader.findInLine(".").charAt(0);
Om juist één karakter te verbruiken zou je kunnen gebruiken:
char c = reader.next(".").charAt(0);
Er is geen API methode om een karakter uit de Scanner te halen. Je moet de String ophalen met scanner.next()
en de String.charAt(0)
methode aanroepen op de geretourneerde String.
Scanner reader = new Scanner(System.in);
char c = reader.next().charAt(0);
Voor de zekerheid zou je ook eerst trim()
op de string kunnen aanroepen om eventuele spaties te verwijderen.
Scanner reader = new Scanner(System.in);
char c = reader.next().trim().charAt(0);
Er zijn drie manieren om dit probleem aan te pakken:
Roep next()
aan op de Scanner, en extraheer het eerste teken van de String (bijv. charAt(0)
) Als je de rest van de regel als tekens wilt lezen, itereer dan over de resterende tekens in de String. Andere antwoorden hebben deze code.
Gebruik setDelimiter("")
om het scheidingsteken op een lege tekenreeks te zetten. Dit zorgt ervoor dat next()
tokeniseert in strings die precies één karakter lang zijn. Dus dan kun je herhaaldelijk next().charAt(0)
aanroepen om de tekens te itereren. Je kunt dan het scheidingsteken op zijn oorspronkelijke waarde zetten en verder gaan met scannen op de normale manier!
Gebruik de Reader API in plaats van de Scanner API. De Reader.read()
methode levert een enkel karakter dat uit de invoerstroom wordt gelezen. Bijvoorbeeld:
Reader reader = new InputStreamReader(System.in);
int ch = reader.read();
if (ch != -1) { // controleer op EOF
// we hebben een teken ...
}
Wanneer je leest van de console via System.in
, wordt de invoer meestal gebufferd door het besturingssysteem, en alleen "released" aan de applicatie wanneer de gebruiker ENTER typt. Dus als u uw applicatie wilt laten reageren op individuele toetsaanslagen, zal dit niet werken. U zou wat OS-specifieke native code dingen moeten doen om line-buffering voor console op OS-niveau uit te schakelen of te omzeilen.
Referentie: