Ce qui est discuté ici concerne la méthode next et la méthode nextLine dans la classe du scanner Java. Que sont les méthodes next() et nextLine() ?
Le problème se produit :
Examinons d'abord le code suivant : Une simple entrée et sortie de console :
afficher la copie ordinaire dans le presse-papiers ?
paquet cn.nileader.app.vi ;
importer java.util.Scanner ;
Test de classe publique {
public static void main(String[] args) lève une exception{
Scanner cin = nouveau Scanner (System.in);
Chaîne ni = cin.nextLine();
System.out.print("Utilisez la méthode next() de la classe Scanner pour recevoir la chaîne que vous venez de saisir : "+ni+" et la longueur est "+ni.length());
ni = cin.nextLine();
System.out.print("Utilisez la méthode next() de la classe Scanner pour recevoir la chaîne que vous venez de saisir : "+ni+" et la longueur est "+ni.length());
}
}
paquet cn.nileader.app.vi ;
importer java.util.Scanner ;
Test de classe publique {
public static void main(String[] args) lève une exception{
Scanner cin = nouveau Scanner (System.in);
Chaîne ni = cin.nextLine();
System.out.print("Utilisez la méthode next() de la classe Scanner pour recevoir la chaîne que vous venez de saisir : "+ni+" et la longueur est "+ni.length());
ni = cin.nextLine();
System.out.print("Utilisez la méthode next() de la classe Scanner pour recevoir la chaîne que vous venez de saisir : "+ni+" et la longueur est "+ni.length());
}
}
Regardez à nouveau le code suivant :
afficher la copie ordinaire dans le presse-papiers ?
paquet cn.nileader.app.vi ;
importer java.util.Scanner ;
Test de classe publique {
public static void main(String[] args) lève une exception{
Scanner cin = nouveau Scanner (System.in);
Chaîne ni = cin.next();
System.out.print("Utilisez la méthode next() de la classe Scanner pour recevoir la chaîne que vous venez de saisir : "+ni+" et la longueur est "+ni.length());
ni = cin.next();
System.out.print("Utilisez la méthode next() de la classe Scanner pour recevoir la chaîne que vous venez de saisir : "+ni+" et la longueur est "+ni.length());
}
}
paquet cn.nileader.app.vi ;
importer java.util.Scanner ;
Test de classe publique {
public static void main(String[] args) lève une exception{
Scanner cin = nouveau Scanner (System.in);
Chaîne ni = cin.next();
System.out.print("Utilisez la méthode next() de la classe Scanner pour recevoir la chaîne que vous venez de saisir : "+ni+" et la longueur est "+ni.length());
ni = cin.next();
System.out.print("Utilisez la méthode next() de la classe Scanner pour recevoir la chaîne que vous venez de saisir : "+ni+" et la longueur est "+ni.length());
}
}
Les extraits de code ci-dessus sont tous corrects et ennuyeux.
La chose merveilleuse arrive...
Exécutez le code suivant :
afficher la copie ordinaire dans le presse-papiers ?
paquet cn.nileader.app.vi ;
importer java.util.Scanner ;
Test de classe publique {
public static void main(String[] args) lève une exception{
Scanner cin = nouveau Scanner (System.in);
Chaîne ni = cin.next();
System.out.println("L'utilisation de la méthode next() de la classe Scanner pour recevoir la chaîne que vous venez de saisir est : "+ni+" et la longueur est "+ni.length());
ni = cin.nextLine();
System.out.print("Utilisez la méthode next() de la classe Scanner pour recevoir la chaîne que vous venez de saisir : "+ni+" et la longueur est "+ni.length());
}
}
paquet cn.nileader.app.vi ;
importer java.util.Scanner ;
Test de classe publique {
public static void main(String[] args) lève une exception{
Scanner cin = nouveau scanner (System.in);
Chaîne ni = cin.next();
System.out.println("L'utilisation de la méthode next() de la classe Scanner pour recevoir la chaîne que vous venez de saisir est : "+ni+" et la longueur est "+ni.length());
ni = cin.nextLine();
System.out.print("Utilisez la méthode next() de la classe Scanner pour recevoir la chaîne que vous venez de saisir : "+ni+" et la longueur est "+ni.length());
}
}
Les résultats en cours d'exécution sont les suivants :
commerçant
Utilisez la méthode next() de la classe Scanner pour recevoir la chaîne que vous venez de saisir : ni commerçant, la longueur est 4
Utilisez la méthode next() de la classe Scanner pour recevoir la chaîne que vous venez de saisir : la longueur est 0
C'est fini, lorsque les méthodes next et nextLine de Java Scanner sont utilisées ensemble,
Vous n'avez aucune chance de saisir la deuxième chaîne ! ! !
Analyse du problème :
La différence apparente entre la méthode next et la méthode nextLine est que la première lit un « segment » de caractères, tandis que la seconde lit une ligne de chaînes.
En termes simples, la raison du phénomène ci-dessus est principalement due à l'irresponsabilité de la méthode next().
Comment fonctionne la méthode next() : (superficiellement parlant)
Parcourez une ligne jusqu'à ce que vous rencontriez un identifiant spécifique : un espace ou un caractère de nouvelle ligne (n), et récupérez le caractère (chaîne) qui le précède.
Regardez ici, la première méthode next() lit "ni commerçant", mais ne lit pas "n", et n'est pas non plus responsable des sauts de ligne, puis renvoie "n" à nextLine() pour traitement.
Comme vous le savez, nextLine() appartient au type de « vision d'argent » qui accepte « n » lorsqu'il le voit, puis analyse le contenu avant n, qui est une chaîne vide. Puis quelque chose s’est mal passé.
Résolution de problèmes :
afficher la copie ordinaire dans le presse-papiers ?
paquet cn.nileader.app.vi ;
importer java.util.Scanner ;
Test de classe publique {
public static void main(String[] args) lève une exception{
Scanner cin = nouveau Scanner (System.in);
Chaîne ni = cin.next();
System.out.println("L'utilisation de la méthode next() de la classe Scanner pour recevoir la chaîne que vous venez de saisir est : "+ni+" et la longueur est "+ni.length());
while( (ni = cin.nextLine()).equals("") ){}
System.out.print("Utilisez la méthode next() de la classe Scanner pour recevoir la chaîne que vous venez de saisir : "+ni+" et la longueur est "+ni.length());
}
}
paquet cn.nileader.app.vi ;
importer java.util.Scanner ;
Test de classe publique {
public static void main(String[] args) lève une exception{
Scanner cin = nouveau Scanner (System.in);
Chaîne ni = cin.next();
System.out.println("L'utilisation de la méthode next() de la classe Scanner pour recevoir la chaîne que vous venez de saisir est : "+ni+" et la longueur est "+ni.length());
while( (ni = cin.nextLine()).equals("") ){}
System.out.print("Utilisez la méthode next() de la classe Scanner pour recevoir la chaîne que vous venez de saisir : "+ni+" et la longueur est "+ni.length());
}
}
Résultats en cours d'exécution :
commerçant
Utilisez la méthode next() de la classe Scanner pour recevoir la chaîne que vous venez de saisir : ni commerçant, la longueur est 4
est un génie
Utilisez la méthode next() de la classe Scanner pour recevoir la chaîne que vous venez de saisir : C'est un génie et la longueur est de 4
Mettez le deuxième cin.nextLine() original
Remplacer par while( (ni = cin.nextLine()).equals("") ){}
De cette manière, l'influence de "n" dans la ligne précédente peut être éliminée.