Java >> Tutoriel Java >  >> Java

Comment utiliser le scanner en Java

Le scanner est une classe du package java.util. Cette classe est responsable de la lecture des données d'une chaîne, du clavier, d'un fichier ou d'un socket réseau. Cet article se concentre uniquement sur la lecture de l'entrée au clavier et l'affichage de la sortie dans une fenêtre de terminal. La lecture de données à partir d'un fichier ou d'un canal réseau se fait de manière similaire. Le scanner n'imprime pas la fenêtre du terminal. Utilisez l'objet System.out pour imprimer sur le terminal. Il est facile d'imprimer sur le terminal avec cet objet.

La classe Scanner est d'abord importée avant d'être utilisée. Ensuite, un objet est créé à partir de celui-ci. L'objet Scanner doit être fermé après son utilisation. System.in est l'objet de flux d'entrée qui représente le clavier. Le scanner est utilisé de différentes manières. Dans cet article, nous aborderons ceux couramment utilisés.

La classe Java Scanner divise l'entrée en jetons par défaut en utilisant un espace blanc comme délimiteur. Il a plusieurs méthodes pour lire et analyser diverses valeurs primitives. En outre, la classe Java Scanner utilise fréquemment une expression régulière pour analyser le texte à la recherche de chaînes et de types primitifs. C'est la méthode la plus simple pour obtenir des entrées en Java. En utilisant le scanner de Java, nous pouvons obtenir des entrées de l'utilisateur dans des types primitifs tels que int, long, double, byte, float, short, etc.

Méthodes de la classe Java Scanner

Les procédures du scanner sont les suivantes :

fermer()

Il est utilisé pour arrêter le scanner.

délimiteur()

Il est utilisé pour acquérir le modèle que la classe Scanner utilise pour faire correspondre les délimiteurs.

trouverTout()

Il est utilisé pour trouver un flux de résultats de correspondance qui correspondent à la chaîne de modèle fournie.

trouverEnLigne()

Il est utilisé pour découvrir la prochaine occurrence d'un modèle composé de la chaîne fournie sans tenir compte des délimiteurs.

findWithInHorizon()

Il est utilisé pour découvrir la prochaine occurrence d'un modèle composé de la chaîne fournie sans tenir compte des délimiteurs.

aSuivant()

Dans le cas où le scanner donné a un autre jeton dans son entrée, il renvoie true.

hasNextBigDecimal()

Il est utilisé pour déterminer si le jeton suivant dans l'entrée de ce scanner peut ou non être lu comme un BigDecimal à l'aide de la méthode nextBigDecimal().

hasNextBigInteger()

Il détermine si le jeton suivant dans l'entrée de ce scanner peut ou non être lu comme un BigDecimal à l'aide de la méthode nextBigDecimal().

hasNextBoolean()

Il est utilisé pour déterminer si le jeton suivant dans l'entrée de ce scanner peut ou non être traduit en booléen à l'aide de la méthode nextBoolean().

hasNextByte()

Il est utilisé pour déterminer si le jeton suivant dans l'entrée de ce scanner peut ou non être lu comme un octet à l'aide de la méthode nextBigDecimal().

hasNextDouble()

Il est utilisé pour déterminer si le jeton suivant dans l'entrée de ce scanner peut ou non être lu comme un BigDecimal à l'aide de la méthode nextByte().

hasNextFloat()

Il est utilisé pour déterminer si le jeton suivant dans l'entrée de ce scanner peut ou non être lu comme un flottant à l'aide de la méthode nextFloat().

hasNextInt()

Il est utilisé pour déterminer si le jeton suivant dans l'entrée de ce scanner peut ou non être lu comme un int à l'aide de la méthode nextInt().

hasNextLine()

Il est utilisé pour voir s'il y a une autre ligne dans l'entrée du scanner.

hasNextLong()

Il est utilisé pour déterminer si oui ou non le jeton suivant dans l'entrée de ce scanner est lu comme un Long en utilisant la méthode nextLong().

hasNextShort()

Il est utilisé pour déterminer si oui ou non le jeton suivant dans l'entrée de ce scanner peut être lu comme un Short en utilisant la méthode nextShort().

ioException()

Il est utilisé pour récupérer la dernière IOException lancée par ce scanner.

La classe Scanner est utilisée directement. Le code suivant invite l'utilisateur à saisir une phrase, qui s'affiche ensuite :

import java.util.Scanner;

public class CodeClass {

  public static void main(String[] args) {

      Scanner scanCode = new Scanner(System.in);
System.out.println("Start by typing  a sentence, then, press Enter:");

      String sentence = scanCode.nextLine();
System.out.println(sentence);

scanCode.close();
  }
}

La classe Scanner est importée dans la première ligne. La première ligne de la fonction principale crée un objet scanner en référençant l'objet "System.in" pour le clavier. L'objet scanner commence à attendre une entrée dès qu'il est créé. La ligne suivante imprime une instruction qui invite l'utilisateur à saisir une phrase. La ligne de code suivante utilise la méthode nextLine() de l'objet scanner pour lire la phrase de l'utilisateur une fois qu'il appuie sur Entrée.

La ligne suivante réimprime la phrase dans la fenêtre du terminal dans le code. L'objet scanner est fermé avec la dernière ligne.

Spitting Valeurs de la ligne d'entrée

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

import java.util.Scanner;

public class CodeClass {
  public static void main(String[] args) {
      Scanner scanCode = new Scanner(System.in);
System.out.println(" Start by typing a line of tokens,then, press Enter:");

while(scanCode .hasNext()){  
System.out.println(scanCode .next());  
      }

scanCode.close();
  }
}

L'objet scanner contient deux autres méthodes :hasNext() et next(). Lorsque l'objet scanner lit une ligne, celle-ci est enregistrée. next() vous amène au jeton suivant (mot). Si des jetons supplémentaires n'ont pas encore été consultés, hasNext() renvoie true.

Malheureusement, cette méthode nécessite que l'utilisateur saisisse une entrée pour le fractionnement et le réaffichage. Pour quitter, appuyez sur Ctrl+z, et vous serez ramené à l'invite de commande.

Le délimiteur dans le code ci-dessus sépare les jetons dans l'espace. Il est possible d'utiliser un personnage différent. La virgule est utilisée dans le code suivant. Si vous testez le code, n'oubliez pas d'appuyer sur Ctrl+z pour terminer la boucle.

import java.util.Scanner;

public class CodeClass {
  public static void main(String[] args) {
      Scanner scanCode = new Scanner(System.in);

System.out.println("Typing tokens in a line, then, press Enter:");

scanCode.useDelimiter(",");

while(scanCode.hasNext()){  
System.out.println(scanCode.next());  
      }

scanCode.close();
  }
}

Si vous avez testé le code (sortie), vous avez peut-être remarqué que des espaces dans les jetons ont été incorporés dans le cadre des jetons si vous avez testé le code (sortie). Une fois la ligne d'entrée lue, tapez scanObj.useDelimiter(“,”); c'est ce qui fait de la virgule le délimiteur.

Types de données primitifs :lecture et validation

nextBoolean() en tant que méthode renvoyant une valeur booléenne

L'utilisateur doit taper "vrai" ou "faux" sans les guillemets dans le code suivant, puis appuyer sur la touche Entrée. Si l'utilisateur tape autre chose, comme "oui" ou "non", un avis d'erreur apparaîtra.

import java.util.Scanner;

public class CodeClass {
  public static void main(String[] args) {

System.out.print("Kindly confirm if you are below 50? ");  
      Scanner scanCode = new Scanner(System.in);

boolean boolVal = scanCode.nextBoolean();  
      if (boolVal == true) {  
System.out.println("You are below 50");  
      }
      else if (boolVal == false) {  
System.out.println("You are over 50");  
      }

scanCode.close();  
  }
}

Parce que java lancera une erreur si l'entrée n'est pas exactement vraie ou fausse, "else if" a été utilisé à la place de "else". La distinction entre print et println est que print attend une entrée sur la ligne courante, alors que println attend une entrée sur la ligne suivante.

nextByte() comme méthode

Un caractère du jeu de caractères ASCII correspond à un octet. Dans certains jeux de caractères orientaux, cependant, un caractère peut être composé de plusieurs octets. La méthode nextByte lit et valide l'octet suivant de l'entrée quel que soit le jeu de caractères. Pour cela, le code suivant est utilisé :

import java.util.Scanner;

public class CodeClass {

  public static void main(String[] args) {

System.out.print("Enter a number below 300,then, press Enter: ");  
      Scanner scanCode = new Scanner(System.in);

      byte nextByte = scanCode.nextByte();  
System.out.println(nextByte);  

scanCode.close();  
  }
}

Un avertissement d'erreur s'affiche si un nombre supérieur à 300 ou un caractère alphabétique est saisi pour ce code.

nextInt() comme méthode

Le jeton entier suivant peut également être validé et accepté comme entrée. Vous pouvez utiliser le code suivant :

import java.util.Scanner;

public class CodeClass {

  public static void main(String[] args) {

System.out.print("Input any Integer Value: ");  
      Scanner scanCode = new Scanner(System.in);

      int numVar = scanCode.nextInt();  
System.out.println(numVar);  

scanCode.close();  
  }
}

Il n'y a plus d'espaces de début ou de fin. Toute valeur entière, y compris les valeurs supérieures à 300, serait autorisée pour ce code. Un message d'erreur s'affiche lorsque la validation échoue à l'aide de ces méthodes nextXXX().

Méthode nextBigInteger()

Il semble que les ingénieurs en logiciel ne seront jamais à court d'idées nouvelles. Un grand entier est un nombre dont la valeur est sensiblement supérieure à un entier. Cependant, il est lu de la même manière qu'un entier en Java. Le code suivant le démontre :

import java.util.Scanner;
import java.math.BigInteger;

public class CodeClass {
  public static void main(String[] args) {

System.out.println("Input an Integer of your choice for Big Integer: ");  
      Scanner scanCode = new Scanner(System.in);

BigInteger numVar = scanCode.nextBigInteger();  
System.out.println(numVar);  

scanCode.close();  
  }
}

La phrase d'importation "import java.math.BigInteger ;" devrait être noté. De plus, le type grand entier est désigné par un B majuscule plutôt qu'un b minuscule.

nextFloat() comme méthode

Le prochain jeton flottant peut également être validé et accepté comme entrée. Vous pouvez utiliser le code suivant :

import java.util.Scanner;

public class CodeClass {

  public static void main(String[] args) {

System.out.print("Input any Float Value: ");  
      Scanner scanCode = new Scanner(System.in);

      float numVar = scanCode.nextFloat();
System.out.println(numVar);  

scanCode.close();  
  }
}

23.456 est un exemple de nombre flottant. Il n'y a plus d'espaces de début ou de fin.

suivantDouble()

Le jeton double suivant peut également être validé et accepté comme entrée. Vous pouvez utiliser le code suivant :

import java.util.Scanner;

public class CodeClass {

  public static void main(String[] args) {

System.out.print("Input any Double Value: ");  

      Scanner scanCode = new Scanner(System.in);

      double numVar = scanCode.nextDouble();
System.out.println(numVar);  

scanCode.close();  
  }
}

23.456 est un exemple de nombre double. Un nombre double diffère d'un flottant car il a une marge d'erreur plus petite. Il n'y a plus d'espaces de début ou de fin.

nextLine() comme méthode

La méthode nextLine() trouve la ligne suivante dans une chaîne. Le caractère de nouvelle ligne, '\n,' peut être utilisé si la chaîne est la ligne d'entrée du clavier après avoir appuyé sur Entrée. Vous pouvez utiliser le code suivant :

import java.util.Scanner;

public class CodeClass {
  public static void main(String[] args) {

System.out.println("Input a line showing  \\n : ");  

      Scanner scanCode = new Scanner(System.in);

      String str = scanCode.nextLine();
System.out.println(str);  

scanCode.close();  
  }

Il convient de noter que le type de chaîne commence par un S majuscule plutôt qu'un s minuscule. Dans cet article, les méthodes nextLine(), hasNext() et next() ont été utilisées précédemment. D'autres méthodes et méthodes de données rudimentaires sont disponibles sur le scanner - nous en reparlerons plus tard.

Affecter une entrée à une variable spécifique

Comme indiqué dans le code ci-dessous, l'entrée peut être affectée à une variable :

import java.util.Scanner;

public class CodeClass {

  public static void main(String[] args) {

      Scanner scanCode = new Scanner(System.in);

System.out.print("Enter Name: ");
      String nameVal = scanCode.nextLine();  

System.out.print("Input your age: ");
      int ageVal = scanCode.nextInt();  

System.out.print("Enter your current remuneration: ");
      double salaryVal = scanCode.nextDouble();  

System.out.println("Your name is: " + nameVal + ", and your age is: " + ageVal + ", While your current remuneration is: " + salaryVal);  

scanCode.close();  
  }
}

Exemple :Lecture de l'entrée de l'utilisateur et affichage à l'utilisateur

 // initially, Import the Scanner class as follows
import java.util.Scanner;

class CodeMain {

  public static void main(String[] args) {

    Scanner scanCode = new Scanner(System.in);  // Creation of a Scanner object
    System.out.println("Input your username");

    String codeUserName = scanCode.nextLine();  // Reading the user input
    System.out.println(" Your Username is: " + codeUserName);  // Output the user input
  }
}

Exemple :Utilisation de différentes méthodes pour lire des données de différents types

import java.util.Scanner;

class CodeMain {

  public static void main(String[] args) {

    Scanner scanCode = new Scanner(System.in);

    System.out.println("Please provide your name, your current age, and your current remuneration:");

    // String input
    String enterYourName = scanCode.nextLine();

    // Numerical input
    int enterYourAge = scanCode.nextInt();
    double enterYourSalary = scanCode.nextDouble();

    // Output user's input
    System.out.println("Your name is: " + enterYourName);
    System.out.println("Your age is: " + enterYourAge);
    System.out.println("Your salary is: " + enterYourSalary);
  }
}

Conclusion

Le scanner est une classe du package java.util. Cette classe est responsable de la lecture des données d'une chaîne, du clavier, d'un fichier ou d'un socket réseau. Cet essai se concentre sur la lecture de l'entrée au clavier et l'affichage de la sortie dans la fenêtre du terminal. La lecture d'une entrée à partir d'une chaîne, d'un fichier ou d'un canal réseau peut être effectuée de la même manière.

Utilisez la fonction nextLine() pour lire toute la ligne de saisie au clavier. Les méthodes hasNext(), next() et la boucle while sont utilisées pour diviser une ligne en jetons. De plus, l'espace est le délimiteur fractionné par défaut, bien que le programmeur puisse utiliser n'importe quel autre délimiteur. N'oubliez pas d'appuyer sur Ctrl+z pour quitter la boucle while si nécessaire.

D'autres systèmes non couverts dans cet article sont utilisés pour supprimer les espaces de début et de fin. De plus, d'autres schémas non présents ici peuvent être utilisés pour valider les jetons. NextBoolean(), nextByte(), nextInt() et d'autres fonctions primitives peuvent être utilisées pour lire des valeurs primitives. Ces méthodes nextXXX() vérifient les erreurs et éliminent les espaces de début et de fin.

Il existe de nombreuses autres méthodes dans le scanner Java. Cependant, le fonctionnement de base du scanner a été couvert dans cet article. Ainsi, la sélection d'un jeton est accomplie grâce à l'utilisation d'expressions régulières.


Balise Java