Martin Gojowsky: oktale Interpretation der führenden Null umgehen

Hallo zusammen,
ich beschäftige mich momentan gezwungenermaßen (IT-Anwendung an der FH) mit Java und habe noch so die eine oder andere Schwierigkeit. Per regulärem Ausdruck ziehe ich aus einer Datei eine Uhrzeit, die beispielsweise so aussieht:
092201.000  (hhmmss.ms)
Mein erster Match (group(1)) ist 09 - die Stunden
Diese Stunden sind an java.util.Calendar zu übergeben. Jetzt habe ich das Problem, dass diese Angabe auf Grund der führenden Null als Oktalzahl interpretiert wird. Kann ich das irgendwie verhindern?
Zwar könnte ich im Regex sowas verwenden: [0]?(\d{1,2}), aber zum einen ist der Ausdruck auch so schon lange genug (es geht nicht nur um die Zeit), zum anderen habe ich so noch nicht das Problem gelöst, dass natürlich auch 00 vorkommen kann.

Hat jemand eine Idee, wie ich mir bestmöglich behelfen könnte?

Viele Grüße
Martin

  1. Hallo Martin,

    ich beschäftige mich momentan gezwungenermaßen (IT-Anwendung an der FH) mit Java und habe noch so die eine oder andere Schwierigkeit. Per regulärem Ausdruck ziehe ich aus einer Datei eine Uhrzeit, die beispielsweise so aussieht:
    092201.000  (hhmmss.ms)
    Mein erster Match (group(1)) ist 09 - die Stunden
    Diese Stunden sind an java.util.Calendar zu übergeben. Jetzt habe ich das Problem, dass diese Angabe auf Grund der führenden Null als Oktalzahl interpretiert wird. Kann ich das irgendwie verhindern?
    Zwar könnte ich im Regex sowas verwenden: [0]?(\d{1,2}), aber zum einen ist der Ausdruck auch so schon lange genug (es geht nicht nur um die Zeit), zum anderen habe ich so noch nicht das Problem gelöst, dass natürlich auch 00 vorkommen kann.

    Hat jemand eine Idee, wie ich mir bestmöglich behelfen könnte?

    So wie ich die Sache sehe sieht das Format immer so aus, dass die Stunden, Minuten und Sekunden durch jeweils zwei Zeichen präsentiert werden, und die Millisekunden durch drei.
    Ich würde also an deiner Stelle zunächst den String in seine String-Bestandteile (hh, mm, ss und ms) zerlegen.
    Dann schaust du dir noch mal genau die Methode Integer.parseInt() an, die für das Einlesen von normalen Zahlen (10er-System) zuständig ist.

    Grüße

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    1. Hallo Marc,

      vielen Dank für den Tip mit parseInt. In diesem Falle habe ich mittlerweile den Hinweis auf SimpleDateFormat bekommen, was mir die Sache extrem vereinfacht und nach was ich eigentlich auch gesucht hätte.
      Dass parseInt die Zahlen im Dezimalsystem speichert, wusste ich vorher nicht, aber ich habe mir die Doku dazu jetzt mal genauer angesehen und ich weiß für die Zukunft, wie ich das Problem beheben kann.

      Viele Grüße
      Martin