String in int konvertieren

Java Basics - Anfänger-Themen: String in int konvertieren

Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern.

Um richtig Java zu lernen empfehlen wir Dir den Java-Videokurs

Erstellt von Booty  |  Antworten: 9

  1. #1
    Booty

    String in int konvertieren
    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

  2. #2
    nocxsville


    Code:
    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.

    Gruß,
    nocxsville.

  3. #3
    FatFire


    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)...

  4. #4
    Booty

    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?

    MfG Booty

  5. #5
    Leroy42


    Am einfachsten, indem du die Länge prüfst:
    Code:
    "1.2.2007".length() == 8
    Code:
    "01.02.2007".length() == 10

  6. #6
    Marco13


    For every difficult problem, there is a solution that ist simple, elegant .... and wrong. [Woher auch immer dieses Zitat stammt]

    Ein Prüfen der Länge in dieser Form bringt erstmal nicht viel
    "123.1.2007".length() == 10
    "laaliiluuu".length() == 10
    ...

    Eigentlich verwendet man zum parsen eines Datums ein DateFormat
    http://java.sun.com/j2se/1.4.2/docs/...ateFormat.html
    denn dafür ist das da.

    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....

  7. #7
    Leroy42


    Zitat Zitat von Marco13
    Ein Prüfen der Länge in dieser Form bringt erstmal nicht viel
    "123.1.2007".length() == 10
    "laaliiluuu".length() == 10
    Du hast den Thread wahrscheinlich nicht genau gelesen.

    Booty parst schon die entsprechenden Teilstrings, so daß deine
    beiden Beispiele schon beim Parsen als faule Eier erkannt würden.

    Die Längenabfrage ist nur als zusätzlicher Test (nach Boot's Nachfrage) zu verstehen.

    Dessen ungeachtet gebe ich dir natürlich vollkommen recht:
    Anstatt selbst rumzuwuseln würde ich natürlich auch gleich
    auf DateFormat zurückgreifen.

    ==> nocxsville hat den Thread in die falsche Richtung getrieben.

  8. #8
    FatFire


    Und ich hab ja auch noch fleissig mitgetrieben

  9. #9
    Marco13


    @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 (müßte man mal genauer nachsehen).

  10. #10
    Booty

    Rehi,
    Danke euch nochmal für die rege Beteiligung eurerseits.
    Bin jetzt fertig mit dem Programm und alles tut das was es soll
    Cya soon,
    Booty


Keine Antwort auf Deine Suche gefunden? Registriere Dich kostenlos und stelle Deine eigene Frage zu Java!

Jetzt kostenlos registrieren