Hier geht es um die Next-Methode und die NextLine-Methode in der Java-Scanner-Klasse. Was sind die Methoden next() und nextLine()?
Das Problem tritt auf:
Schauen wir uns zunächst den folgenden Code an: Eine einfache Konsoleneingabe und -ausgabe:
Klartext in Zwischenablage anzeigen und drucken?
Paket cn.nileader.app.vi;
import java.util.Scanner;
öffentlicher Klassentest {
public static void main(String[] args) löst eine Ausnahme aus{
Scanner cin = neuer Scanner(System.in);
String ni = cin.nextLine();
System.out.print("Verwenden Sie die next()-Methode der Scanner-Klasse, um die Zeichenfolge zu erhalten, die Sie gerade eingegeben haben: „+ni+“ und die Länge ist „+ni.length());
ni = cin.nextLine();
System.out.print("Verwenden Sie die next()-Methode der Scanner-Klasse, um die Zeichenfolge zu erhalten, die Sie gerade eingegeben haben: „+ni+“ und die Länge ist „+ni.length());
}
}
Paket cn.nileader.app.vi;
import java.util.Scanner;
öffentlicher Klassentest {
public static void main(String[] args) löst eine Ausnahme aus{
Scanner cin = neuer Scanner(System.in);
String ni = cin.nextLine();
System.out.print("Verwenden Sie die next()-Methode der Scanner-Klasse, um die Zeichenfolge zu erhalten, die Sie gerade eingegeben haben: „+ni+“ und die Länge ist „+ni.length());
ni = cin.nextLine();
System.out.print("Verwenden Sie die next()-Methode der Scanner-Klasse, um die Zeichenfolge zu erhalten, die Sie gerade eingegeben haben: „+ni+“ und die Länge ist „+ni.length());
}
}
Schauen Sie sich den folgenden Code noch einmal an:
Klartext in Zwischenablage anzeigen und drucken?
Paket cn.nileader.app.vi;
import java.util.Scanner;
öffentlicher Klassentest {
public static void main(String[] args) löst eine Ausnahme aus{
Scanner cin = neuer Scanner(System.in);
String ni = cin.next();
System.out.print("Verwenden Sie die next()-Methode der Scanner-Klasse, um die Zeichenfolge zu erhalten, die Sie gerade eingegeben haben: „+ni+“ und die Länge ist „+ni.length());
ni = cin.next();
System.out.print("Verwenden Sie die next()-Methode der Scanner-Klasse, um die Zeichenfolge zu erhalten, die Sie gerade eingegeben haben: „+ni+“ und die Länge ist „+ni.length());
}
}
Paket cn.nileader.app.vi;
import java.util.Scanner;
öffentlicher Klassentest {
public static void main(String[] args) löst eine Ausnahme aus{
Scanner cin = neuer Scanner(System.in);
String ni = cin.next();
System.out.print("Verwenden Sie die next()-Methode der Scanner-Klasse, um die Zeichenfolge zu erhalten, die Sie gerade eingegeben haben: „+ni+“ und die Länge ist „+ni.length());
ni = cin.next();
System.out.print("Verwenden Sie die next()-Methode der Scanner-Klasse, um die Zeichenfolge zu erhalten, die Sie gerade eingegeben haben: „+ni+“ und die Länge ist „+ni.length());
}
}
Die obigen Codeausschnitte sind alle korrekt und langweilig.
Das Wunderbare kommt...
Führen Sie den folgenden Code aus:
Klartext in Zwischenablage anzeigen und drucken?
Paket cn.nileader.app.vi;
import java.util.Scanner;
öffentlicher Klassentest {
public static void main(String[] args) löst eine Ausnahme aus{
Scanner cin = neuer Scanner(System.in);
String ni = cin.next();
System.out.println("Verwenden Sie die next()-Methode der Scanner-Klasse, um die Zeichenfolge zu empfangen, die Sie gerade eingegeben haben: „+ni+“ und die Länge ist „+ni.length());
ni = cin.nextLine();
System.out.print("Verwenden Sie die next()-Methode der Scanner-Klasse, um die Zeichenfolge zu erhalten, die Sie gerade eingegeben haben: „+ni+“ und die Länge ist „+ni.length());
}
}
Paket cn.nileader.app.vi;
import java.util.Scanner;
öffentlicher Klassentest {
public static void main(String[] args) löst eine Ausnahme aus{
Scanner cin = neuer Scanner(System.in);
String ni = cin.next();
System.out.println("Verwenden Sie die next()-Methode der Scanner-Klasse, um die Zeichenfolge zu empfangen, die Sie gerade eingegeben haben: „+ni+“ und die Länge ist „+ni.length());
ni = cin.nextLine();
System.out.print("Verwenden Sie die next()-Methode der Scanner-Klasse, um die Zeichenfolge zu erhalten, die Sie gerade eingegeben haben: „+ni+“ und die Länge ist „+ni.length());
}
}
Die Laufergebnisse sind wie folgt:
Ladenbesitzer
Verwenden Sie die Methode next() der Klasse Scanner, um die Zeichenfolge zu erhalten, die Sie gerade eingegeben haben: ni shopkeeper, die Länge beträgt 4
Verwenden Sie die Methode next() der Klasse Scanner, um die gerade eingegebene Zeichenfolge zu empfangen: Die Länge beträgt 0
Es ist vorbei, wenn die Methoden next und nextLine des Java Scanners zusammen verwendet werden.
Sie haben keine Chance, die zweite Zeichenfolge einzugeben! ! !
Problemanalyse:
Der offensichtliche Unterschied zwischen der next-Methode und der nextLine-Methode besteht darin, dass erstere ein „Segment“ von Zeichen liest, während letztere eine Zeile mit Zeichenfolgen liest.
Einfach ausgedrückt liegt der Grund für das obige Phänomen hauptsächlich in der Verantwortungslosigkeit der next()-Methode.
So funktioniert die next()-Methode: (oberflächlich betrachtet)
Scannen Sie eine Zeile, bis Sie auf einen bestimmten Bezeichner stoßen: ein Leerzeichen oder ein Zeilenumbruchzeichen (n), und rufen Sie das Zeichen (die Zeichenfolge) davor ab.
Schauen Sie hier, die erste next()-Methode liest „ni shopkeeper“, liest aber weder „n“ noch ist sie für Zeilenumbrüche verantwortlich und wirft dann „n“ zur Verarbeitung an nextLine().
Wie Sie wissen, gehört nextLine() zu der Art von „Geld-sehenden“ Typ, der „n“ akzeptiert, wenn er es sieht, und dann den Inhalt vor n, einem leeren String, scannt. Dann ging etwas schief.
Problemlösung:
Klartext in Zwischenablage anzeigen und drucken?
Paket cn.nileader.app.vi;
import java.util.Scanner;
öffentlicher Klassentest {
public static void main(String[] args) löst eine Ausnahme aus{
Scanner cin = neuer Scanner(System.in);
String ni = cin.next();
System.out.println("Verwenden Sie die next()-Methode der Scanner-Klasse, um die Zeichenfolge zu empfangen, die Sie gerade eingegeben haben: „+ni+“ und die Länge ist „+ni.length());
while( (ni = cin.nextLine()).equals("") ){}
System.out.print("Verwenden Sie die next()-Methode der Scanner-Klasse, um die Zeichenfolge zu erhalten, die Sie gerade eingegeben haben: „+ni+“ und die Länge ist „+ni.length());
}
}
Paket cn.nileader.app.vi;
import java.util.Scanner;
öffentlicher Klassentest {
public static void main(String[] args) löst eine Ausnahme aus{
Scanner cin = neuer Scanner(System.in);
String ni = cin.next();
System.out.println("Verwenden Sie die next()-Methode der Scanner-Klasse, um die Zeichenfolge zu empfangen, die Sie gerade eingegeben haben: „+ni+“ und die Länge ist „+ni.length());
while( (ni = cin.nextLine()).equals("") ){}
System.out.print("Verwenden Sie die next()-Methode der Scanner-Klasse, um die Zeichenfolge zu erhalten, die Sie gerade eingegeben haben: „+ni+“ und die Länge ist „+ni.length());
}
}
Laufergebnisse:
Ladenbesitzer
Verwenden Sie die Methode next() der Klasse Scanner, um die Zeichenfolge zu erhalten, die Sie gerade eingegeben haben: ni shopkeeper, die Länge beträgt 4
ist ein Genie
Verwenden Sie die Methode next() der Klasse Scanner, um die Zeichenfolge zu erhalten, die Sie gerade eingegeben haben: „He is a genius“ und die Länge beträgt 4
Setzen Sie die ursprüngliche zweite cin.nextLine()
Wechseln Sie zu while( (ni = cin.nextLine()).equals("") ){}
Auf diese Weise kann der Einfluss von „n“ in der vorherigen Zeile eliminiert werden.