Ich benutze Java-Scanner, um Eingaben von System.in zu lesen. Ich muss die alphanumerische Zeile einschließlich Leerzeichen/Tab lesen, aber nicht die neue Zeile und sollte auch keine leere Eingabe zulassen.Java: Scanner - Ich brauche alphanumerische Zeile einschließlich Leerzeichen/Tab aber keine neue Zeile lesen
Zum Beispiel:
a new name
oder
a-new-name-1
Hier ist mein Scanner:
Scanner reader = new Scanner(System.in);
Ich habe versucht, diese Möglichkeiten:
String name = reader.nextLine();
oder
String name = reader.next("^[A-Za-z0-9- ]+$");
oder
name = reader.next("/^[a-z\\d\\-_\\s]+$/i");
Für letzte 2 Fälle mit dem Eingang "ein Testnamen 1", hatte ich Fehler:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.next(Scanner.java:1418)
............
Und wenn verwendet reader.nextLine(), es wird übersprungen und auf die nächste Eingabe gewartet. Zum Beispiel:
Für diesen Teil des Codes:
Do you want to update audience name?[y/n]
y
Enter audience name :
Do you want to update audience description?[y/n]
y
Enter audience description :
Do you want to update audience rule?[y/n]
Darf ich jede Hilfe hier:
System.out.println("Do you want to update audience name?[y/n]");
opt = reader.next().trim();
if(opt.equalsIgnoreCase("y"))
{
System.out.println("Enter audience name : ");
name = reader.nextLine();
}
System.out.println("Do you want to update audience description?[y/n]");
opt = reader.next().trim();
if(opt.equalsIgnoreCase("y"))
{
System.out.println("Enter audience description : ");
description = reader.nextLine();
}
ich das sehe?
reader.nextLine() bricht Sätze automatisch um \ n. Warum reader.nextLine() arbeitet nicht an Ihrem Fall? – CSK
Mögliches Duplikat von [Überspringt nextLine() nach der Verwendung von next(), nextInt() oder anderen nextFoo() Methoden] (http://stackoverflow.com/questions/13102045/skipping-nextline-after-using-next-nextint- or-other-nextfoo-Methoden) –
Warum setzt man 'opt' nicht auf' reader.nextLine(). trim() '? Warum nennst du 'reader.next()', nimm einfach die ganze Zeile.Ihr Problem besteht darin, dass das Zeilenumbruchzeichen nicht im 'System.in' -Puffer verbraucht wird. Wenn Sie also' description = reader.nextLine() 'aufrufen, wird' description' auf das gesetzt, was noch im 'System 'ist. in' Puffer. –