En Java, la classe Scanner permet à un utilisateur d’écrire du texte et au programme de lire ce texte.
Création et utilisation de l’outil Scanner
L’outil Scanner peut être importé dans un programme Java grâce à la commande import java.util.Scanner.
L’outil Scanner lui-même est créé avec Scanner scanner = new Scanner(System.in).
import java.util.Scanner;public class Programme { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // Affiche "Ecrire un nombre: " System.out.print("Ecrire un nombre: "); //Lit l'entier écrit par l'utilisateur et l'affecte // à la variable nombre du programme int nombre = scanner.nextInt(); // Affiche le nombre saisit par l'utilisateur System.out.println(nombre); scanner.close(); }
Les différentes méthodes de lecture de l’outil scanner
L’outil Scanner détient plusieurs méthodes qui permettent de lire les entrées de l’utilisateur.
Type
Méthodes
Description
String
next()
Renvoie le prochain token complet de l’analyseur
byte
nextByte()
Renvoie un byte lu au clavier
double
nextDouble()**
Renvoie un double lu au clavier
float
nextFloat()
Renvoie un float lu au clavier
int
nextInt()
Renvoie un int lu au clavier
long
nextLong()
Renvoie un long lu au clavier
short
nextShort()
Renvoie un short lu au clavier
boolean
nextBoolean()
Renvoie un boolean lu au clavier
String
nextLine()
Renvoie une chaîne de caractère lu au clavier
boolean
hasNext()
Retourne « vrai » si le scanner a une autre donnée dans son entrée
boolean
hasNextInt()
Vérifie si la prochaine donnée dans l’entrée peut être interprétée comme un int en utilisant la méthode nextInt() ou non
boolean
hasNextFloat()
Vérifie si la prochaine donnée dans l’entrée de ce scanner peut être interprétée comme un float en utilisant la méthode nextFloat() ou non
boolean
hasNextLine()
Vérifie s’il y a une autre ligne dans l’entrée de ce scanner ou non
Info
scanner.nextInt()
Cette methode lit uniquement l’entier, mais laisse le retour à la ligne dans le buffer.
Scanner scanner = new Scanner(System.in);int age = scanner.nextInt(); // Lit "42" mais laisse le "\n" dans le bufferString nom = scanner.nextLine(); // capture le "\n" restant -> nom = ""
Integer.parseInt(scanner.nextLine())
Cette méthode lit toute la ligne y compris le retour à la ligne, puis convertit la chaîne en entier
Scanner scanner = new Scanner(System.in);int age = Integer.parseInt(scanner.nextLine()); // consomme le "\n"String nom = scanner.nextLine(); // fonctionne normalement
Contrôle des données saisies par l’utilisateur
Il est possible avec la classe Scanner de préciser le format des données à saisir et que l’utilisateur doit respecter.
Pour les nombres on peut faire une exception de type “NumberFormatException”.
int age = 0;try {age = Integer.parseInt(scanner.nextLine());} catch (NumberFormatException e) {System.out.println("Veuillez entrer un chiffre.")}
On peut aussi utiliser la fonction hasNext() pour une vérification préalable
import java.util.Scanner;Scanner scanner = new Scanner(System.in);System.out.print("Veuillez saisir un nombre");if (scanner.hasNextInt()) { int nombre = scanner.nextInt; System.out.print("Nombre valide : " + nombre);} else { System.out.print("Entrée invalide"); scanner.next(); // Consomme l'entrée invalide}scanner.close();
Pour les Expressions régulières (Regex) on peut faire une exception de type “InputMismatchException”