Classe Scanner Java

java.util.Scanner est une nouvelle fonctionnalité de Java 5. Nous pouvons obtenir la saisie utilisateur via la classe Scanner.

Voici la syntaxe de base pour créer un objet Scanner :

Scanner s = new Scanner(System.in);

Ensuite, nous démontrons une saisie de données simple et obtenons la chaîne d'entrée via les méthodes next() et nextLine() de la classe Scanner. Avant la lecture, nous devons généralement utiliser hasNext et hasNextLine pour déterminer s'il reste des données d'entrée :

Utilisation de la méthode next :

Code du fichier ScannerDemo.java :

import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { Scanner scan = new Scanner(System.in); //Réception de données à partir du clavier //Réception d'une chaîne à l'aide de la méthode next System.out.println("Réception à l'aide de la méthode next :"); //Déterminer s'il y a encore une entrée if (scan.hasNext()) { String str1 = scan.next(); System.out.println("Les données d'entrée sont :" + str1); } scan.close(); } }

La sortie après exécution du programme ci-dessus est :

$ javac ScannerDemo.java
$ java ScannerDemo
next方式接收:
example com
输入的数据为:example

On peut voir que la chaîne com n'a pas été affichée. Passons maintenant à nextLine.

Utilisation de la méthode nextLine :

Code du fichier ScannerDemo.java :

import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { Scanner scan = new Scanner(System.in); //Réception de données à partir du clavier //Réception d'une chaîne à l'aide de la méthode nextLine System.out.println("Réception à l'aide de la méthode nextLine :"); //Déterminer s'il y a encore une entrée if (scan.hasNextLine()) { String str2 = scan.nextLine(); System.out.println("Les données d'entrée sont :" + str2); } scan.close(); } }

La sortie après exécution du programme ci-dessus est :

$ javac ScannerDemo.java
$ java ScannerDemo
nextLine方式接收:
example com
输入的数据为:example com

On peut voir que la chaîne com est affichée.

Différence entre next() et nextLine()

next():

  • 1. La saisie ne peut être terminée qu'après la lecture de caractères valides.
  • 2. Pour les espaces blancs rencontrés avant des caractères de saisie valides, la méthode next() les supprime automatiquement.
  • 3. Ce n'est qu'après avoir saisi des caractères valides que les espaces blancs qui les suivent seront utilisés comme séparateur ou terminateur.
  • next() ne peut pas récupérer une chaîne contenant des espaces.

nextLine():

  • 1. La touche Entrée est le terminateur, c'est-à-dire que la méthode nextLine() renvoie tous les caractères avant que la touche Entrée ne soit saisie.
  • 2. Elle peut obtenir des espaces blancs.

Si vous souhaitez saisir des données de type int ou float, la classe Scanner le prend également en charge, mais avant la saisie, il est préférable d'utiliser la méthode hasNextXxx() pour valider, puis d'utiliser nextXxx() pour lire :

Code du fichier ScannerDemo.java :

import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { Scanner scan = new Scanner(System.in); //Recevoir des données depuis le clavier int i = 0; float f = 0.0f; System.out.print("Saisissez un entier :"); if (scan.hasNextInt()) { //Déterminer si l'entrée est un entier i = scan.nextInt(); //Recevoir un entier System.out.println("Données de type entier :" + i); } else { //Message d'erreur de saisie System.out.println("L'entrée n'est pas un entier !"); } System.out.print("Saisissez un nombre décimal :"); if (scan.hasNextFloat()) { //Déterminer si l'entrée est un nombre décimal f = scan.nextFloat(); //Recevoir un nombre décimal System.out.out("System:" + f); } else { //Message d'erreur de saisie System.out.println("L'entrée n'est pas un nombre !"); } scan.close(); } }

La sortie après exécution du programme ci-dessus est :

$ javac ScannerDemo.java
$ java ScannerDemo
输入整数:12
整数数据:12
输入小数:1.2
小数数据:1.2

Dans l'exemple ci-dessous, nous pouvons saisir plusieurs nombres et calculer leur somme et. Chaque nombre est saisi en appuyant. Saisissez l'entrée en entrant un non-nombre, puis affichez le résultat :

Code du fichier ScannerDemo.java :

import java.util.Scanner; class ExampleTest { public static void main(args[] System) { System.out.println("Veuillez saisir un nombre :"); Scanner scan = new Scanner(System.in); double sum = 0; int m = 0; while (scan.hasNext()) { double x = scan.nextDouble(); m = m + 1; sum = sum + x; } System.out.println(m + "La somme des nombres est" + sum); System.out.println(m + "La moyenne des nombres est" + (sum / m)); scan.close(); } }

La sortie après l'exécution du programme ci-dessus (entrez une valeur non numérique pour terminer la saisie) :

$ javac ScannerDemo.java
$ java ScannerDemo
请输入数字:
12
23
15
21.4
end
4个数的和为71.4
4个数的平均值是17.85

Méthodes courantes

Méthode Description
Constructeurs
Scanner(File source) Créer un Scanner à partir d'un fichier
Scanner(InputStream source) Créer un Scanner à partir d'un flux d'entrée
Scanner(String source) Créer un Scanner à partir d'une chaîne
Méthodes de saisie de base
boolean hasNext() Vérifier qu'il y a un jeton suivant (séparé par des espaces)
String next() Lire le jeton suivant (chaîne)
boolean hasNextLine() Vérifier s'il y a une ligne suivante
String nextLine() Lire le contenu de la ligne suivante
Méthodes de vérification de type
boolean hasNextInt() Vérifier si le jeton suivant est un entier
boolean hasNextDouble() Vérifier si le jeton suivant est un double
boolean hasNextBoolean() Vérifier si le jeton suivant est un booléen
Méthodes de lecture de type
int nextInt() Lire l'entier suivant
double nextDouble() Lire le double suivant
boolean nextBoolean() Lire le booléen suivant
long nextLong() Lire l'entier long suivant
float nextFloat() Lire le float suivant
short nextShort() Lire l'entier court suivant
byte nextByte() Lire l'octet suivant
Contrôle du délimiteur
Scanner useDelimiter(String pattern) Définir le motif de délimiteur
Scanner useDelimiter(Pattern pattern) Définir le délimiteur à l'aide d'une expression régulière
String delimiter() Renvoyer le motif de délimiteur actuellement utilisé
Autres méthodes
void close() Fermer le scanner
Scanner skip(Pattern pattern) Ignorer l'entrée correspondant au modèle spécifié
Scanner skip(String pattern) Ignorer l'entrée correspondant à la chaîne spécifiée
String findInLine(Pattern pattern) Rechercher le modèle spécifié dans la ligne actuelle
String findInLine(String pattern) Rechercher la chaîne spécifiée dans la ligne actuelle
Scanner reset() Réinitialiser le scanner
Locale locale() Renvoyer les paramètres régionaux actuellement utilisés par le scanner
Scanner useLocale(Locale locale) Définir les paramètres régionaux du scanner

Pour plus de contenu, consultez la documentation de l'API :https://www.example.com/manual/jdk11api/java.base/java/util/Scanner.html。

Autres extensions