J'essaie de trouver un moyen de prendre une char
entrée 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 un String
. Pourtant, cela ne fonctionnerait pas toujours dans tous les cas, car l'autre méthode que j'appelle de ma méthode nécessite char
une entrée. Par conséquent, je dois trouver un moyen de prendre explicitement un caractère comme entrée.
De l'aide?
java
input
char
java.util.scanner
Ralph
la source
la source
char c = reader.next("[a-zA-Z]").charAt(0);
Scanner de configuration:
Après cela
reader.next()
, une chaîne à un seul caractère sera renvoyée.la source
Il n'y a pas de méthode API pour obtenir un personnage du scanner. Vous devez obtenir la chaîne en utilisant
scanner.next()
et invoquer laString.charAt(0)
méthode sur la chaîne retournée.Juste pour être sûr avec les espaces, vous pouvez également appeler d'abord
trim()
la chaîne pour supprimer tous les espaces.la source
reader.next()
vous donnerait -il pas déjà la chaîne à partir du premier caractère non blanc?Il existe trois façons d'aborder ce problème:
Appelez
next()
le scanner et extrayez le premier caractère de la chaîne (par exemplecharAt(0)
) Si vous voulez lire le reste de la ligne sous forme de caractères, parcourez les caractères restants de la chaîne. D'autres réponses ont ce code.Utilisez
setDelimiter("")
pour définir le délimiteur sur une chaîne vide. Cela entraînera lanext()
création de jetons en chaînes contenant exactement un caractère. Ainsi, vous pouvez appeler à plusieurs reprisesnext().charAt(0)
pour itérer les caractères. Vous pouvez ensuite régler le délimiteur sur sa valeur d'origine et reprendre la numérisation de la manière normale!Utilisez l'API Reader au lieu de l'API Scanner. La
Reader.read()
méthode délivre un seul caractère lu à partir du flux d'entrée. Par exemple:Lorsque vous lisez à partir de la console via
System.in
, l'entrée est généralement mise en mémoire tampon par le système d'exploitation et uniquement "libérée" vers l'application lorsque l'utilisateur tape ENTER. Donc, si vous souhaitez que votre application réponde à des frappes de clavier individuelles, cela ne fonctionnera pas. Vous auriez besoin de faire des trucs de code natif spécifiques au système d'exploitation pour désactiver ou contourner la mise en tampon de ligne pour la console au niveau du système d'exploitation.Référence:
la source
Vous pouvez résoudre ce problème de "saisir un caractère à la fois au clavier" très simplement. Sans avoir à utiliser un scanner tout et aussi ne pas effacer le tampon d'entrée comme un effet secondaire, en utilisant cela.
Si tout ce dont vous avez besoin est la même fonctionnalité que la fonction "getChar ()" du langage C, cela fonctionnera très bien. Le gros avantage de "System.in.read ()" est que la mémoire tampon n'est pas effacée après chaque caractère de votre saisie. Donc, si vous avez toujours besoin de toutes les entrées des utilisateurs, vous pouvez toujours obtenir le reste à partir du tampon d'entrée. Le
"char c = scanner.next().charAt(0);"
chemin saisit le caractère mais efface le tampon.J'espère que cela vous sera utile et bonne chance! PS Désolé, je sais que c'est un article plus ancien, mais j'espère que ma réponse apportera de nouvelles perspectives et pourrait aider d'autres personnes qui ont également ce problème.
la source
Cela ne fonctionne pas réellement:
Il y a quelques bonnes explications et références dans cette question: Pourquoi la classe Scanner n'a-t-elle pas une méthode nextChar? "Un Scanner divise son entrée en jetons en utilisant un modèle de délimiteur", ce qui est assez ouvert. Par exemple lors de l'utilisation de ce
pour cette ligne d'entrée "(1 + 9) / (3 - 1) + 6 - 2" l'appel au prochain retourne "(1", c sera mis à '(', et vous finirez par perdre le ' 1 'au prochain appel au suivant ()
Généralement, lorsque vous souhaitez obtenir un personnage, vous souhaitez ignorer les espaces. Cela a fonctionné pour moi:
Référence: regex pour correspondre à un seul caractère qui est tout sauf un espace
la source
"[^\\s]" === "\\S"
La meilleure façon de saisir un caractère dans la classe Scanner est:
la source
la source
Essayez ceci: char c = S.nextLine (). CharAt (0);
la source
Vous devez utiliser votre lecteur d'entrée personnalisé pour des résultats plus rapides au lieu d'extraire le premier caractère de la lecture de String. Lien pour Custom ScanReader et explication: https://gist.github.com/nik1010/5a90fa43399c539bb817069a14c3c5a8
Code de numérisation des caractères:
la source
Il existe deux approches, vous pouvez soit prendre exactement un caractère ou strictement un caractère. Lorsque vous utilisez exactement, le lecteur ne prendra que le premier caractère, quel que soit le nombre de caractères que vous saisissez.
Par exemple:
Lorsque vous donnez un ensemble de caractères en entrée, dites "abcd", le lecteur ne considérera que le premier caractère, c'est-à-dire la lettre 'a'
Mais lorsque vous utilisez strictement, l'entrée doit être un seul caractère. Si l'entrée contient plus d'un caractère, le lecteur ne prendra pas l'entrée
Supposons que vous donniez une entrée "abcd", aucune entrée n'est prise et la variable c aura une valeur Null.
la source
Pour obtenir un seul caractère char c = reader.next ("."). CharAt (0);
la source
la source
Vous devez obtenir la chaîne en utilisant scanner.next () et appeler la méthode String.charAt (0) sur la chaîne renvoyée.
Exemple:
production
la source
il vous suffit d'écrire ceci pour obtenir une valeur de type char.
la source
la source
Essaye ça
la source
À propos, vous ne pouvez pas prendre un caractère directement comme entrée. Comme vous pouvez le voir ci-dessus, un String est d'abord pris puis le charAt (0); est trouvé et stocké
la source
Utilisez simplement ...
Cela obtient le premier caractère de l'entrée suivante.
la source
Vous pouvez utiliser le typage:
De cette façon, vous prendrez l'entrée dans String en raison de la fonction 'next ()', mais elle sera ensuite convertie en caractère en raison du 'char' mentionné entre parenthèses.
Cette méthode de conversion du type de données en mentionnant le type de données de destination entre parenthèses est appelée typecating. Cela fonctionne pour moi, j'espère que cela fonctionne pour vous :)
la source
String
en unchar
.Pour trouver l'index d'un caractère dans une piqûre donnée, vous pouvez utiliser ce code:
la source
Le moyen le plus simple consiste à changer d'abord la variable en chaîne et à accepter l'entrée sous forme de chaîne. Ensuite, vous pouvez contrôler en fonction de la variable d'entrée avec une instruction if-else ou switch comme suit.
la source