Meri19 Geschrieben 15. Februar 2012 Teilen Geschrieben 15. Februar 2012 Hallo, ich hoffe es kann mir jemand helfen, denn ich komme nicht weiter. Ich will ein kurzes Programm schreiben, bei dem ich erst ein Datum in dem Format "TT MM JJJJ" eingebe, dieses dann anhand der Lehrzeichen splittet und in 3 einzelne Variablen speichere, welche ich dann wieder einzeln ausgeben kann. Folgend habe ich es probiert, aber es geht noch nicht: Scanner input = new Scanner(System.in); String tag; String monat; String jahr; String eingabe; System.out.print("Geben Sie bitte das Datum in folgendem Format ein 'TT MM JJJJ': "); eingabe = input.next(); //String Splitten und in Arrays speichern String[] spliten = eingabe.split(" "); // –> splitten an den Leerzeichen tag = spliten[0]; monat = spliten[1]; jahr = spliten[2]; System.out.println(tag); System.out.println(monat); System.out.println(jahr); Danke schon für eure hilfe Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dicka Geschrieben 15. Februar 2012 Teilen Geschrieben 15. Februar 2012 Scanner (Java Platform SE 7 ) lies mal die ersten paar Zeilen der Dokumentation zum Scanner. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Meri19 Geschrieben 16. Februar 2012 Autor Teilen Geschrieben 16. Februar 2012 (bearbeitet) Scanner (Java Platform SE 7 ) lies mal die ersten paar Zeilen der Dokumentation zum Scanner. Dann müsste ich folgendes verwenden oder: String input = "1 fish 2 fish red fish blue fish"; Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*"); System.out.println(s.nextInt()); System.out.println(s.nextInt()); System.out.println(s.next()); System.out.println(s.next()); s.close(); und muss bei useDelimiter() dann das Lehrzeichen rein oder was kommt in die Klammer rein? und mein Wert der Variable "eingabe" kann ich hir der variable input übergeben oder? ich versteh das noch nicht so ganz, ich hoffe es kann mir jemand weiter helfen. Bearbeitet 16. Februar 2012 von Meri19 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dicka Geschrieben 16. Februar 2012 Teilen Geschrieben 16. Februar 2012 (bearbeitet) Der Scanner splittet schon automatisch an Leerzeichen (default: whitespace delimiter). D.h. bei TT MM JJJJ enthält er schon 3 Tokens, du könntest es so machen: tag = input.next(); monat = input.next(); jahr = input.next(); Es wäre aber sicherer wenn du einen BufferedReader nimmst und mit reader.readLine() die Eingabe abholst, dann kannst du eingabe.split(" ") verwenden: BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); Bearbeitet 16. Februar 2012 von dicka Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Dragon8 Geschrieben 16. Februar 2012 Teilen Geschrieben 16. Februar 2012 Es wäre aber sicherer wenn du einen BufferedReader nimmst und mit reader.readLine() die Eingabe abholst, dann kannst du eingabe.split(" ") verwenden: BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); Warum sollte das sicherer sein? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dicka Geschrieben 16. Februar 2012 Teilen Geschrieben 16. Februar 2012 Weil mit der Scanner Methode bei diesem Anwendungsfall ein "Deadlock" bei falscher Eingabe auftreten könnte, ohne Fehlermeldung. Beim BufferedReader ist "nur" mit Exceptions zu rechnen, was die Fehlersuche aber vereinfacht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Dragon8 Geschrieben 17. Februar 2012 Teilen Geschrieben 17. Februar 2012 Wenn abzusehen ist, dass die Gruppe der Nutzer es wirklich nicht schaffen, die Eingabe so vorzunehmen, wie es angegeben wurde, dann kann man sich auch einfach mit dem Scanner die Eingabe zeilenweise zurückgeben lassen um diese dann selber zu splitten. Genauso gut könnte man auch die next() Methode mit einem RegExp als Übergabeparameter benutzen, dann kann man auch gleichzeitig sicherstellen dass die Eingabe wenigstens formal dem entspricht, was man erwartet. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Meri19 Geschrieben 28. Februar 2012 Autor Teilen Geschrieben 28. Februar 2012 Der Scanner splittet schon automatisch an Leerzeichen (default: whitespace delimiter). D.h. bei TT MM JJJJ enthält er schon 3 Tokens, du könntest es so machen: tag = input.next(); monat = input.next(); jahr = input.next(); Danke schön für die Hilfe, ich hatte einfach zu kompliziert gedacht, obwohl es auch viel einfacher ging bzw. die Fähigkeiten der Klasse nicht gekannt. Jetzt klapt es perfekt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.