J'essaie de trouver un moyen de prendre une entrée char
du clavier.
J'ai essayé d'utiliser :
Scanner reader = new Scanner(System.in);
char c = reader.nextChar();
Cette méthode n'existe pas.
J'ai essayé de prendre c
comme String
. Mais cela ne fonctionne pas dans tous les cas, car l'autre méthode que j'appelle à partir de ma méthode nécessite un char
en entrée. Je dois donc trouver un moyen de prendre explicitement un char en entrée.
Vous pouvez m'aider ?
Vous pourriez prendre le premier caractère de Scanner.next
:
char c = reader.next().charAt(0);
Pour consommer exactement un caractère, vous pourriez utiliser :
char c = reader.findInLine(".").charAt(0);
Pour consommer strictement un caractère, vous pourriez utiliser :
char c = reader.next(".").charAt(0);
Il n'y a pas de méthode API pour obtenir un caractère du Scanner. Vous devez obtenir la chaîne en utilisant scanner.next()
et invoquer la méthode String.charAt(0)
sur la chaîne retournée.
Scanner reader = new Scanner(System.in);
char c = reader.next().charAt(0);
Par précaution, vous pouvez aussi appeler trim()
sur la chaîne pour supprimer les espaces.
Scanner reader = new Scanner(System.in);
char c = reader.next().trim().charAt(0);
Il existe trois façons d'aborder ce problème :
Appelez next()
sur le Scanner, et extrayez le premier caractère de la Chaîne (par exemple charAt(0)
) Si vous voulez lire le reste de la ligne comme des caractères, itérez sur les caractères restants dans la Chaîne. D'autres réponses ont ce code.
Utilisez setDelimiter("" ;)
pour définir le délimiteur à une chaîne vide. Cela permettra à next()
d'obtenir des chaînes de caractères d'exactement un caractère. Ainsi, vous pouvez appeler next().charAt(0)
de manière répétée pour itérer les caractères. Vous pouvez ensuite remettre le délimiteur à sa valeur d'origine et reprendre l'analyse de la manière habituelle !
Utilisez l'API Reader au lieu de l'API Scanner. La méthode Reader.read()
fournit un caractère unique lu à partir du flux d'entrée. Par exemple :
Reader = new InputStreamReader(System.in) ;
int ch = reader.read() ;
if (ch != -1) { // vérification du EOF
// nous avons un caractère ...
}
Lorsque vous lisez depuis la console via System.in
, l'entrée est typiquement mise en mémoire tampon par le système d'exploitation, et seulement "libérée" ; vers l'application lorsque l'utilisateur tape ENTER. Donc, si vous voulez que votre application réponde à des frappes de clavier individuelles, cela ne fonctionnera pas. Vous devrez utiliser du code natif spécifique au système d'exploitation pour désactiver ou contourner la mise en mémoire tampon des lignes de la console au niveau du système d'exploitation.
Référence :