Veröffentlicht 15. Februar 201213 j 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
15. Februar 201213 j Scanner (Java Platform SE 7 ) lies mal die ersten paar Zeilen der Dokumentation zum Scanner.
16. Februar 201213 j Autor 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 201213 j von Meri19
16. Februar 201213 j 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 201213 j von dicka
16. Februar 201213 j 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?
16. Februar 201213 j 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.
17. Februar 201213 j 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.
28. Februar 201213 j Autor 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.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.