Résoluxa0: Java Scanner NextLine Skips
Lors de l’utilisation de la méthode nextLine()
après la méthode next()
ou nextInt()
en Java, parfois la méthode nextLine()
saute l’entrée en cours à lire et passe à l’entrée suivante. Cet article expliquera pourquoi cela se produit et comment résoudre ce problème.
Avant d’examiner le problème avec la méthode nextLine()
, commençons par comprendre le fonctionnement de la méthode nextLine()
. Cette méthode appartient à la classe java.util.Scanner
.
Cette fonction imprime la ligne entière à l’exception du séparateur de ligne à la fin. Il recherche une entrée à la recherche d’un séparateur de ligne. Si aucun séparateur de ligne n’est trouvé, il peut rechercher toutes les entrées tout en recherchant la ligne à ignorer.
Cette méthode de scanner va au-delà de la ligne actuelle. S’il y a une entrée qui a été ignorée, il la renvoie. Suivez ce lien pour vous référer à la documentation de la méthode.
Syntaxe:
public String nextLine()
Notez que cette fonction ne prend aucun paramètre et renvoie la ligne sautée. Regardez l’exemple ci-dessous pour voir comment cela fonctionne.
// To demonstrate the working of nextLine() method
import java.util.*;
public class Example {
public static void main(String[] args) {
String a = "Java \n is \n intriguing";
// create a new scanner
Scanner sc = new Scanner(a);
// print the next line
System.out.println(sc.nextLine());
// print the next line again
System.out.println(sc.nextLine());
// print the next line again
System.out.println(sc.nextLine());
}
}
Production :
Java
is
intriguing
L’utilisation principale de la méthode nextLine()
en Java est de lire une entrée de chaîne avec un espace.
Notez que nous pouvons également utiliser la méthode next()
pour saisir une chaîne, mais elle ne lit que jusqu’au premier espace rencontré. De plus, la méthode next()
place le curseur dans la même ligne après avoir pris l’entrée.
Cependant, la méthode nextLine()
place le curseur dans la ligne suivante après avoir lu l’entrée. Regardez l’exemple ci-dessous.
import java.util.*;
public class Demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// Try reading a string with space using next()
System.out.println("Enter the name of a movie");
String name = sc.next();
// Done to bring the cursor to next line
sc.nextLine();
// Re-reading the string using nextLine()
System.out.println("Re-enter this name");
String rename = sc.nextLine();
System.out.println();
System.out.println("Here is the output:");
// printing the output
System.out.println(name);
System.out.println(rename);
}
}
Production :
Enter the name of a movie
Harry Potter
Re-enter this name
Harry Potter
Here is the output:
Harry
Harry Potter
Notez que la méthode next()
ne lit que le prénom avant l’espace et ignore le reste. Cependant, la méthode nextLine()
lit la chaîne entière avec un espace.
Le problème avec la méthode nextLine()
Pour comprendre ce problème, regardez l’exemple ci-dessous.
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// This part takes the input
System.out.println("Input the Roll Number:");
int number = sc.nextInt();
System.out.println("Input your full name:");
String name = sc.nextLine();
System.out.println("Input your branch:");
String branch = sc.nextLine();
// This part prints the values
System.out.println("Roll No: " + number);
System.out.println("Name: " + name);
System.out.println("Branch: " + branch);
}
}
Production :
Input the Roll Number:
1
Input your full name:
Input your branch:
Computer Science
Roll No: 1
Name:
Branch: Computer Science
Mais la sortie requise est celle-ci :
Input the Roll Number : 1 Input your full name : Harry Potter Input your branch
: Computer Science Roll No : 1 Name : Harry Potter Branch : Computer Science
Notez que la méthode nextLine()
ignore l’entrée pour Name
et passe à la place à l’entrée suivante pour la branche.
Pourquoi ce problème se produit-il
Cela se produit parce que lorsque la méthode nextInt()
de la classe Scanner lit le numéro de rouleau, elle renvoie la valeur 1
. Cette valeur est stockée dans la variable numéro.
Mais le curseur ne passe pas à la ligne suivante après avoir lu le numéro de matricule. Il reste juste après 1
. Comme ça:
1_ // the cursor remains here only
Par conséquent, lorsque nous utilisons la méthode nextLine()
pour lire le nom, elle commence à lire l’entrée à partir de la position actuelle du curseur. Donc après 1
, la ligne suivante n’est rien d’autre que la nouvelle ligne elle-même. Le caractère \n
représente cette nouvelle ligne. Ainsi, le nom est simplement \n
.
Comment résoudre ce problème de Java Scanner NextLine Skips
Il existe deux façons de résoudre ce problème.
Utilisation de la méthode Java Integer.parseInt()
La méthode parseInt()
appartient à la classe Integer du package java.lang
et renvoie le type de données primitif d’une certaine chaîne. Ces méthodes sont principalement de deux types :
Integer.parseInt(String s)
Integer.parseInt(String s, int radix)
Pour travailler avec les sauts nextLine()
, nous utiliserons la première méthode - Integer.parseInt(String s)
. Cela lit la ligne complète pour l’entier en tant que chaîne. Plus tard, il le convertit en entier.
Syntaxe:
int value = Integer.parseInt(sc.nextLine());
Implémentons le même code que nous avons utilisé ci-dessus avec la méthode Java Integer.parseInt()
et rectifions le problème.
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// This part takes the input
System.out.println("Input the Roll Number:");
// Using the parseInt() method this time
int number = Integer.parseInt(sc.nextLine());
System.out.println("Input your full name:");
String name = sc.nextLine();
System.out.println("Input your branch:");
String branch = sc.nextLine();
// This part prints the values
System.out.println("Roll No: " + number);
System.out.println("Name: " + name);
System.out.println("Branch: " + branch);
}
}
Production :
Input the Roll Number:
1
Input your full name:
Harry Potter
Input your branch:
Computer Science
Roll No: 1
Name: Harry Potter
Branch: Computer Science
Cette fois, le code fonctionne correctement. Mais nous ne pouvons pas l’utiliser pour la chaîne d’entrée après Byte character(Byte.parseByte(sc.nextLine()))
.
Nous pouvons utiliser la deuxième méthode dans ce cas. Voici le lien vers documentation pour plus d’informations.
Utilisation d’une instruction supplémentaire nextLine()
Cela consomme la nouvelle ligne restante. Regardez l’exemple.
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// This part takes the input
System.out.println("Input the Roll Number:");
int number = sc.nextInt();
// An extra nextLine() to consume the leftover line
sc.nextLine();
System.out.println("Input your full name:");
String name = sc.nextLine();
System.out.println("Input your branch:");
String branch = sc.nextLine();
// This part prints the values
System.out.println("Roll No: " + number);
System.out.println("Name: " + name);
System.out.println("Branch: " + branch);
}
}
Production :
Input the Roll Number:
1
Input your full name:
Harry Potter
Input your branch:
Computer Science
Roll No: 1
Name: Harry Potter
Branch: Computer Science
Article connexe - Java Error
- Correction de l'erreur Reach End of File While Parsing en Java
- Correction de l'erreur NoSuchElementException en Java
- Correction du type d'erreur d'instruction de retour manquante en Java
- Correction de l'exception JavaFx dans la méthode de démarrage de l'application
- Class Is Not Abstract and Does Not Override Error en Java