Hallo,
Ich versuche mich gerade daran einen String in einzelne int-werte zu konvertieren, jedoch komme ich nicht so recht weiter.
Was passieren soll, ist, dass ein Datum in der Form TT.MM.JJJJ also zB 31.01.2007 eingegeben werden soll und der dazugehörige Wochentag ausgegeben werden soll. Die Berechnung des Tages steht alles. Wenn ich die werte von Tag Monat und Jahr einzeln eingebe und direkt als int-werte speichere klappt auch alles. ich scheitere nur daran, dass die Eingabe des Datums komplett in einem Schritt erfolgt und die TT, MM und JJJJ Werte in int-werte konvertiert werden.
Folgendes ist mein Lösungansatz:
Code:
String TT = "TT";
String MM = "MM";
String JJJJ = "JJJJ";
String Datum = IOTools.readString("Bitte geben sie ein gueltiges Datum in der Form "+TT+"."+MM+"."+JJJJ+"ein:");
int rTag = Integer.parseInt(String TT);
int rMonat = Integer.parseInt(String MM);
int rJahr = Integer.parseInt(String JJJJ);
Wenn ihr mir auf die Spünge helfen könnten wär das klasse,
MfG
Booty
final String eingabe = [...] // eingabe ist der von der console eingelesene String im Format TT.MM.JJJJ
final int rTag = Integer.parseInt(eingabe.substring(0, 2));
ggf. nochmal den Start- und Endindex überprüfen. Das gleich musst du dann für den Monat bzw. Jahr tun.
P.S.: falls ungültige Zeichen eingegeben wurden (Buchstaben) wird eine NumberFormatException geworfen, die sollte man auch abfangen.
Hmpf, ich glaube, ich muß mal meine Signatur ändern...schon das zweite Mal, daß ich jetzt Code poste...
Code:
String eingabe = //halt das Datum, welches Du brauchst
String teil = eingabe.substring(0 , eingabe.indexOf("."));
int tag = Integer.parseInt(teil);
eingabe = eingabe.substring(eingabe.indexOf(".") + 1);
teil = eingabe.substring(0 , eingabe.indexOf("."));
int monat = Integer.parseInt(teil);
int jahr = Integer.parseInt(eingabe.substring(eingabe.indexOf(".") + 1));
Also, erstens ist das jetzt so komplett, hast jetzt das Ergebnis in den Variablen tag, monat, jahr liegen und damit bist Du auch auf der sicheren Seite, falls irgendein Scherzkeks halt nicht 01.02.2007 eingibt, sondern 1.2.2007 (hmmm...so abwegig ist das gar nicht)...
Hallo ihr zwei.
Erstmal ein großes Dankeschön an euch beide für eure Hilfe. Hat mir schon sehr geholfen!
Ich poste euch jetzt nochmal meinen Code, denn es gibt da noch ein kleines Problem:
Code:
public static void main(String[] args) {
String TT = "TT";
String MM = "MM";
String JJJJ = "JJJJ";
String Datum = IOTools.readString("Bitte geben sie ein gueltiges Datum in der Form "+TT+"."+MM+"."+JJJJ+" ein:");
String teil = Datum.substring(0 , Datum.indexOf("."));
int rTag = Integer.parseInt(teil);
Datum = Datum.substring(Datum.indexOf(".") + 1);
teil = Datum.substring(0 , Datum.indexOf("."));
int rMonat = Integer.parseInt(teil);
int rJahr = Integer.parseInt(Datum.substring(Datum.indexOf(".") + 1));
Tag tag = new Tag(rTag, rMonat, rJahr);
System.out.println ("Der " +rTag+"."+rMonat+"."+rJahr+ " ist ein " +tag.getWochentag());
Das Problem was noch besteht ist, dass er keine Daten der Form 1.2.2007 (also ohne die Nullen) akzeptieren soll.^^
Dafür müsste ich dann noch eine exception schreiben...aber wie veranker ich das in dem Code, dass er die Daten ohne die Nullen garnicht erst akzeptier?
Aber wenn du das durch ein Zerlegen des Strings machen willst, um auf bestimmte Sachen "leichter" Einfluß nehmen oder genauer reagieren zu können, solltest du (zumindest) die Einzelteile der Strings prüfen (d.h. überprüfe, ob der Tag- und Monats-String-Teil die Länge 2 und der Jahres-String die Länge 4 haben).
Es gibt dann aber immernoch viel, was schiefgehen kann. Geh' einfach mal davon aus, dass der Benutzer deines Programms ein Zufallsgenerator ist (und viele Benutzer SIND Zufallsgeneratoren)) und du immer richtig reagieren mußt, egal, welche Eingabe dort kommt....
@Leroy42: Ich habe den Thread gestern Abend (->müde) überflogen, aber in bezug auf das letzte, was Booty gepostet hat:
Code:
String teil = Datum.substring(0 , Datum.indexOf("."));
int rTag = Integer.parseInt(teil);
dort wird zwar ein "teil" geparst, aber eine Überprüfung, ob z.B.
Datum.indexOf(".") == -1
teil.equals("murks") // (NumberFormatException)
rTag > 31
oder so gilt, wird dort bisher nicht gemacht (obwohl nocxsville zumindest auf die ersten beiden schon hingewiesen hatte!)
Ob das mit dem DateFormat immer funktioniert, weiß ich aber gerade nicht: Wenn man sicherstellen will, dass einstellige Zahlen mit einer führenden "0" beginnen, könnte das mit einem DateFormat u.U. komplizierter sein, als wenn man von Hand parst :roll: (müßte man mal genauer nachsehen).