Comment utiliser Scanner en Java

How Use Scanner Java



Le scanner en Java est une classe du package java.util. Cette classe a pour objectif de lire l'entrée d'une chaîne, du clavier, d'un fichier ou d'un socket réseau. Cet article se concentre uniquement sur la lecture des entrées du clavier et l'affichage du résultat dans la fenêtre du terminal. Des idées similaires peuvent être utilisées pour lire l'entrée du fichier ou du canal réseau. Le scanner n'imprime pas dans la fenêtre du terminal. Pour imprimer sur le terminal, utilisez l'objet System.out. Il est simple d'utiliser cet objet pour imprimer sur le terminal, comme illustré ci-dessous.

Pour utiliser la classe Scanner, elle doit d'abord être importée. Après cela, un objet doit être instancié à partir de celui-ci. Après avoir utilisé l'objet Scanner, il doit être fermé. L'objet de flux d'entrée qui représente le clavier est System.in. Le scanner a plusieurs méthodes. Seuls les plus couramment utilisés seront expliqués dans cet article.







Contenu de l'article



Utilisation simple de la classe Scanner

Le code suivant demande à l'utilisateur de saisir une phrase, puis il affiche la phrase :



importer java.util.Scanner;

Publique classerLa classe{
Publique statique annulerprincipale( Chaîne de caractères []arguments) {
Scanner scanObj= NouveauScanner( Système .dans);
Système .dehors.imprimer(« Tapez une phrase et appuyez sur Entrée : »);

Chaîne de caractères phrase=scanObj.nextLine();
Système .dehors.imprimer(phrase);

scanObj.proche();
}
}

La première ligne importe la classe Scanner. Dans la fonction principale, la première ligne crée un objet scanner en utilisant l'objet System.in pour le clavier. Dès que l'objet scanner est créé, il commence à attendre l'entrée. La ligne suivante imprime une déclaration, demandant à l'utilisateur de taper une phrase. La ligne suivante dans le code utilise la méthode nextLine() de l'objet scanner pour lire la phrase de l'utilisateur après avoir appuyé sur Entrée. La ligne après, dans le code, réimprime la phrase dans la fenêtre du terminal. La dernière ligne ferme l'objet scanner.





Cracher la ligne d'entrée en valeurs

Le code suivant divise la ligne d'entrée en mots (jetons), en utilisant l'espace comme délimiteur :

importer java.util.Scanner;

Publique classerLa classe{
Publique statique annulerprincipale( Chaîne de caractères []arguments) {
Scanner scanObj= NouveauScanner( Système .dans);
Système .dehors.imprimer(« Tapez une ligne de jetons et appuyez sur Entrée : »);

tandis que(scanObj.aSuivant()){
Système .dehors.imprimer(scanObj.Suivant());
}

scanObj.proche();
}
}

hasNext() et next() sont deux autres méthodes de l'objet scanner. Lorsque l'objet scanner lit une ligne, il la garde. next() accède au prochain jeton (mot). hasNext() renvoie true s'il existe un autre jeton non encore accédé.



Malheureusement, l'utilisateur doit toujours saisir l'entrée pour le fractionnement et le réaffichage avec ce code. Pour mettre fin à tout cela, appuyez sur Ctrl + z et vous devriez être de retour à l'invite de commande.

Dans le code ci-dessus, le délimiteur sépare les jetons dans l'espace. Un autre caractère peut être utilisé. Le code suivant utilise la virgule. N'oubliez pas d'appuyer sur Ctrl+z pour terminer la boucle si vous testez le code.

importer java.util.Scanner;

Publique classerLa classe{
Publique statique annulerprincipale( Chaîne de caractères []arguments) {
Scanner scanObj= NouveauScanner( Système .dans);
Système .dehors.imprimer(« Tapez une ligne de jetons et appuyez sur Entrée : »);

scanObj.useDelimiter(',');

tandis que(scanObj.aSuivant()){
Système .dehors.imprimer(scanObj.Suivant());
}

scanObj.proche();
}
}

Si vous avez testé le code, vous auriez remarqué que les espaces dans les jetons ont été inclus dans les jetons (sortie). L'expression scanObj.useDelimiter(,); tapé après la lecture de la ligne d'entrée ; c'est ce qui fait la virgule, le délimiteur.

Lecture et validation des types de données primitifs

méthode nextBoolean()

Dans le code suivant, l'utilisateur doit taper vrai ou faux sans les guillemets, puis appuyer sur la touche Entrée si l'utilisateur tape autre chose, par exemple oui ou non, un message d'erreur s'affichera.

importer java.util.Scanner;

Publique classerLa classe{
Publique statique annulerprincipale( Chaîne de caractères []arguments) {
Système .dehors.imprimer(« Avez-vous plus de 24 ans ? ');
Scanner scanObj= NouveauScanner( Système .dans);

booléenbl=scanObj.suivantBooléen();
si (bl== vrai) {
Système .dehors.imprimer(« Vous avez plus de 24 ans »);
}
autre si (bl== faux) {
Système .dehors.imprimer(« Vous avez moins de 24 ans »);
}

scanObj.proche();
}
}

Étant donné que java émettra un message d'erreur tant que l'entrée n'est pas vraie ou fausse exactement, le else if a été utilisé au lieu de else.

La différence entre les méthodes, print et println, est que print attend l'entrée sur la ligne actuelle, tandis que println attend l'entrée sur la ligne suivante.

méthode nextByte()

Avec le jeu de caractères ASCII, un caractère correspond à un octet. Cependant, avec certains jeux de caractères orientaux, un caractère peut être composé de plusieurs octets. Indépendamment du jeu de caractères, la méthode nextByte lit et valide l'octet suivant de l'entrée. Le code suivant peut être utilisé à cette fin :

importer java.util.Scanner;

Publique classerLa classe{
Publique statique annulerprincipale( Chaîne de caractères []arguments) {
Système .dehors.imprimer('Tapez le numéro<128, press Enter: ');
Scanner scanObj= NouveauScanner( Système .dans);

octetbt=scanObj.suivantByte();
Système .dehors.imprimer(bt);

scanObj.proche();
}
}

Si un nombre supérieur à 127 ou un caractère alphabétique est saisi pour ce code, un message d'erreur sera émis.

méthode nextInt()

Le prochain jeton entier en tant qu'entrée peut également être validé et accepté. Le code suivant peut être utilisé :

importer java.util.Scanner;

Publique classerLa classe{
Publique statique annulerprincipale( Chaîne de caractères []arguments) {
Système .dehors.imprimer('Entrez n'importe quel entier :');
Scanner scanObj= NouveauScanner( Système .dans);

entiersur une=scanObj.nextInt();
Système .dehors.imprimer(sur une);

scanObj.proche();
}
}

Les espaces de début ou de fin ont été supprimés. Pour ce code, toute valeur entière, y compris les valeurs supérieures à 127, serait acceptée. Avec ces méthodes nextXXX(), une fois la validation échouée, un message d'erreur est émis.

Méthode nextBigInteger()

Il semble que les ingénieurs logiciels ne cesseront jamais de proposer de nouvelles choses. Un grand entier est un entier dont la valeur est beaucoup plus grande que celle d'un entier. Cependant, avec Java, il peut être lu de la même manière que l'entier. Le code suivant illustre cela :

importer java.util.Scanner;
importer java.math.BigInteger;

Publique classerLa classe{
Publique statique annulerprincipale( Chaîne de caractères []arguments) {
Système .dehors.imprimer('Entrez n'importe quel entier pour un grand entier : ');
Scanner scanObj= NouveauScanner( Système .dans);

GrandEntier sur une=scanObj.suivantBigInteger();
Système .dehors.imprimer(sur une);

scanObj.proche();
}
}

Notez l'instruction import, import java.math.BigInteger;. Notez également que le type grand entier commence par un B majuscule et non par un b minuscule.

Méthode nextFloat()

Le prochain jeton flottant en tant qu'entrée peut également être validé et accepté. Le code suivant peut être utilisé :

importer java.util.Scanner;

Publique classerLa classe{
Publique statique annulerprincipale( Chaîne de caractères []arguments) {
Système .dehors.imprimer(« Entrez n'importe quel flottant : »);
Scanner scanObj= NouveauScanner( Système .dans);

flottersur une=scanObj.suivantFloat();
Système .dehors.imprimer(sur une);

scanObj.proche();
}
}

Un exemple de nombre flottant est 23.456. Les espaces de début ou de fin ont été supprimés.

suivantDouble()

Le prochain double jeton en entrée peut également être validé et accepté. Le code suivant peut être utilisé :

importer java.util.Scanner;

Publique classerLa classe{
Publique statique annulerprincipale( Chaîne de caractères []arguments) {
Système .dehors.imprimer(« Entrez n'importe quel double : »);
Scanner scanObj= NouveauScanner( Système .dans);

doublesur une=scanObj.suivantDouble();
Système .dehors.imprimer(sur une);

scanObj.proche();
}
}

Un exemple de nombre double est 23.456. Un nombre double est différent d'un flottant car il a moins de marge d'erreur. Les espaces de début ou de fin ont été supprimés.

méthode nextLine()

La méthode nextLine() est pour une chaîne. Si la chaîne est la ligne d'entrée du clavier après avoir appuyé sur Entrée, elle peut avoir le caractère de nouvelle ligne, ' '. Le code suivant peut être utilisé :

importer java.util.Scanner;

Publique classerLa classe{
Publique statique annulerprincipale( Chaîne de caractères []arguments) {
Système .dehors.imprimer('Entrez une ligne ayant\n : ');
Scanner scanObj= NouveauScanner( Système .dans);

Chaîne de caractères p=scanObj.nextLine();
Système .dehors.imprimer(p);

scanObj.proche();
}
}

Notez que le type de chaîne commence par le S majuscule et non par le s minuscule.

Les méthodes nextLine(), hasNext() et next() ont déjà été utilisées dans cet article. Le scanner a d'autres méthodes et d'autres méthodes de données primitives – voir plus loin.

Affectation d'une entrée à une variable

L'entrée peut être affectée à une variable, comme le montre le code suivant :

importer java.util.Scanner;

Publique classerLa classe{
Publique statique annulerprincipale( Chaîne de caractères []arguments) {
Scanner scanObj= NouveauScanner( Système .dans);

Système .dehors.imprimer('Entrez le nom: ');
Chaîne de caractères Nom=scanObj.nextLine();

Système .dehors.imprimer(« Entrez l'âge : »);
entierâge=scanObj.nextInt();

Système .dehors.imprimer(« Saisir le salaire : »);
doubleun salaire=scanObj.suivantDouble();

Système .dehors.imprimer('Nom: ' +Nom+ ', Âge: ' +âge+ ', Un salaire: ' +un salaire);

scanObj.proche();
}
}

Conclusion

Le scanner en Java est une classe du package java.util. Cette classe a pour objectif de lire l'entrée d'une chaîne, du clavier, d'un fichier ou d'un socket réseau. Cet article s'est principalement concentré sur la lecture des entrées du clavier et l'affichage du résultat dans la fenêtre du terminal. Des idées similaires peuvent être utilisées pour lire l'entrée de la chaîne, du fichier ou du canal réseau.

Pour lire toute la ligne de saisie au clavier, utilisez la méthode nextLine(). La ligne sous forme de chaîne peut être divisée en jetons, en utilisant les méthodes hasNext() et next(), et la boucle while. Le délimiteur par défaut pour le fractionnement est l'espace, mais le programmeur peut choisir un autre délimiteur. N'oubliez pas de faire Ctrl+z pour arrêter la boucle while, si nécessaire. La suppression des espaces de début et de fin peut être effectuée à l'aide d'autres schémas non abordés dans cet article. La validation des jetons peut également être effectuée à l'aide d'autres schémas non abordés dans cet article.

Les valeurs primitives peuvent être lues à l'aide de nextBoolean(), nextByte(), nextInt(), etc. Ces méthodes nextXXX() effectuent la validation et suppriment également les espaces de début et de fin.

Le Java Scanner a beaucoup plus de méthodes. Cependant, l'utilisation de base du Scanner a été expliquée dans cet article. La sélection d'un jeton se fait en fait à l'aide de techniques d'expression régulière. L'utilisation de techniques d'expression régulière est une discussion, pour une autre fois.