Java : comment détecter la saisie d'une touche tapée au clavier ?

Une classe permet de détecter la saisie d'une touche sur le clavier. Voici comment l'utiliser.

Pour détecter la saisie du clavier en Java, il faut faire appel à la classe Scanner. Cette classe est utilisée pour disposer d'un moyen de détecter des éléments présents dans un flux. Si le flux précisé est "System.in", alors le scanner regardera le clavier pour détecter les touches.

La classe scanner propose différentes méthodes pour lire les touches saisies. La méthode nextLine() permet de récupérer la ligne entière saisie par l'utilisateur jusqu'à ce qu'il appuie sur la touche "Entrée". Il existe également des méthodes correspondant au type de caractère que vous attendez. Ainsi, la méthode nextInt() convertit la touche saisie en entier. Pour utiliser cette classe, il est nécessaire d'importer la classe Scanner :

import java.util.Scanner;

Ensuite, déclarez votre Scanner, affichez un message pour indiquer à l'utilisateur de renseigner du texte, puis utilisez les méthodes du scanner pour lire cet élément :

Scanner clavier = new Scanner(System.in);
System.out.println("Entrez un entier :");
int monEntier = clavier.nextInt();

Si vous utilisez une méthode de récupération d'un type de contenu précis, comme nextInt(), avec la méthode nextLine(), vous rencontrerez des problèmes, car ces méthodes ne lisent pas le dernier retour à la ligne contrairement à nextLine(). Cela génère un problème : lors de l'appel de nextLine(), rien ne se produit, car nextLine() lit le retour à la ligne laissé par une autre méthode, et l'étape est sautée. Pour éviter ce problème, il y a deux solutions. La première est d'appeler nextLine() une fois de plus avant la saisie pour lire le retour à la ligne gênant :

int monEntier = input.nextInt();
input.nextLine(); // Lit le retour à la ligne laissé par nextInt()
String maChaine = input.nextLine();

La deuxième méthode consiste à utiliser tout le temps la méthode nextLine(), puis à convertir le résultat avec une méthode de parse.

int monEntier = 0;
try {
 monEntier = Integer.parseInt(input.nextLine());
} catch (NumberFormatException e) {
 e.printStackTrace();
}
String maChaine = input.nextLine();

Java