Hallo zusammen,
das unterstehende Programm soll aus z.B. folgender Eingabe "12.01.2010" (Konsoleneingabe) den Tag, Monat und Jahr auslesen können.
Das klappt soweit auch. Wenn ich über die Konsole jedoch folgendes eingebe "12.11" bleibt das Programm hängen (bzw. der Scanner springt in die nächste Zeile und wartet auf eine weitere Eingabe. Die Ausgabe sieht wie folgt aus:
Bitte geben Sie den Termin (tt.MM.YYYY) ein
12.11
erstes hasNext == true
zweites hasNext == true
Erst wenn ich in der nächsten Zeile die Eingabe mit einem Return beende, wird auch das Programm beendet und die Parameter wie gewünscht ausgegeben. Die Ausgabe sieht dann wie folgt aus:
Ihre Eingabe: 12.11.0
Wieso passiert das? Als newDelimiter Parameter habe ich [.\n] übergeben. Nach meinem Verständnis trennt der Delimiter die Zahlen bei einem Punkt oder am Ende einer Zeile (also wenn ich meine Eingabe mit Return beendet habe). Entsprechend müsste er bei der Eingabe "12.12\n" die beiden Zahlen trennen können und das Programm beenden (oder?).
Ich wäre euch sehr dankbar wenn ihr mir bei diesem Problem weiterhelft. Ich würde gerne verstehen wieso sich das Programm so verhält und was ich tun muss, damit das Programm bei der Eingabe von "12.12" automatisch beendet wird und die Parameter wie folgt belegt sind (tag = 12, monat = 12, Jahr = 0).
Im voraus VIELEN DANK!!!
Christian
das unterstehende Programm soll aus z.B. folgender Eingabe "12.01.2010" (Konsoleneingabe) den Tag, Monat und Jahr auslesen können.
Java:
import java.util.*;
public class Delimiter
{
public static void main (String args[])
{
int tag = 0, monat = 0, jahr = 0;
System.out.println("Bitte geben Sie den Termin (tt.MM.YYYY)ein");
Scanner sc1 = new Scanner(System.in).useDelimiter("[.\n]"); // Punkt oder neue Zeile als Trenner
if (sc1.hasNextInt())
{
System.out.println("erstes hasNext == true");
tag = sc1.nextInt();
}
if (sc1.hasNextInt())
{
System.out.println("zweites hasNext == true");
monat = sc1.nextInt(); //12.12
}
if (sc1.hasNextInt())
{
System.out.println("drittes hasNext == true");
jahr = sc1.nextInt();
}
System.out.println("Ihre Eingabe: " + tag + "." + monat + "." + jahr);
}
}
Bitte geben Sie den Termin (tt.MM.YYYY) ein
12.11
erstes hasNext == true
zweites hasNext == true
Erst wenn ich in der nächsten Zeile die Eingabe mit einem Return beende, wird auch das Programm beendet und die Parameter wie gewünscht ausgegeben. Die Ausgabe sieht dann wie folgt aus:
Ihre Eingabe: 12.11.0
Wieso passiert das? Als newDelimiter Parameter habe ich [.\n] übergeben. Nach meinem Verständnis trennt der Delimiter die Zahlen bei einem Punkt oder am Ende einer Zeile (also wenn ich meine Eingabe mit Return beendet habe). Entsprechend müsste er bei der Eingabe "12.12\n" die beiden Zahlen trennen können und das Programm beenden (oder?).
Ich wäre euch sehr dankbar wenn ihr mir bei diesem Problem weiterhelft. Ich würde gerne verstehen wieso sich das Programm so verhält und was ich tun muss, damit das Programm bei der Eingabe von "12.12" automatisch beendet wird und die Parameter wie folgt belegt sind (tag = 12, monat = 12, Jahr = 0).
Im voraus VIELEN DANK!!!
Christian