Java Letzte Zahlenreihe einer (sub)String hochzählen

Atroxy

Ensign
Registriert
Apr. 2009
Beiträge
191
Hallo,

ich habe ein kleines Problem bei dem ich feststecke. Ich habe eine Kette die setzt sich aus 'Wortelement' und 'Zahlenlement' zusammen. Also 13R und dann eine fünfstellige Nummer [13R00000]. Ich möchte nun, dass die fünfstellige Nummer weiter hochgezählt wird ohne dass diese getrennt gespeichert wird. Würde also gerne beim Aufruf der letzten Zahl nur die Ziffern 4 bis 8 einbeziehen in die Hochzählung. Ich denke mir, dass ich es am Besten mit einer Substring machen könnte, allerdings fällt es mir schwer es so zu schreiben, dass er die ersten drei Zeichen der letzten Kette ignoriert.

Vielleicht kennt jemand eine simple Lösung und könnte mir einen Tipp geben.
 
int count = Integer.ParseInt(nummer.substring(3,7))++;
nummer = "13R" + count.toString();

Wenn "13R" dynamisch ist, den vorderen Teil des Substrings einzeln sichern. Und du musst noch count.toString so umwandeln dass es genügend nullen vornedran hat mit NumberFormat oder ner for-Schleife.
 
Zuletzt bearbeitet:
Wenn ich mich recht entsinne, war der Rückgabewert vom Postfixinkrementoperator der jeweils alte Wert des Operanden. Dein Code sieht sonst korrekt aus, aber müsste es nicht

Code:
int count = ++Integer.ParseInt(nummer.substring(3,7));

sein? Oder habe ich da gerade einen Denkfehler?
 
mental.dIseASe schrieb:
Wenn ich mich recht entsinne, war der Rückgabewert vom Postfixinkrementoperator der jeweils alte Wert des Operanden. Dein Code sieht sonst korrekt aus, aber müsste es nicht

Code:
int count = ++Integer.ParseInt(nummer.substring(3,7));

sein? Oder habe ich da gerade einen Denkfehler?

Geht beides in diesem Falle nicht. Java verbietet das hier im selben Augenblick wie das parsen,... man weiß ja nicht,ob das parsen klappt. (Du kannst keine Variablen updaten, die es nicht gibt)

Daher erst parsen und danach
Code:
count++;

und danach wieder zusammeln basteln.
 
Zuletzt bearbeitet:
ParseInt muss doch so oder so in einen try-catch Block, von dem her sollte das technisch doch schon gehen?
Zumindest so sollte es auf jeden Fall gehen (habe keinen Java-Compiler hier):

int count = ++((int)(Integer.ParseInt(nummer.substring(3,7)));
 
darkarchon schrieb:
ParseInt muss doch so oder so in einen try-catch Block, von dem her sollte das technisch doch schon gehen?
Zumindest so sollte es auf jeden Fall gehen (habe keinen Java-Compiler hier):

int count = ++((int)(Integer.ParseInt(nummer.substring(3,7)));

Nein, du musst es nicht mit Try-Catch abfangen und es geht immer noch nicht, weil es das selbe Problem bleibt.

Du weißt nicht, ob es klappt, willst eventuell das nicht vorhandene in int casten und dann noch erhöhen.

Ein Try-Catch-Block ändert auch nichts am dem Problem des nicht vorhanden sein.
 
Zuletzt bearbeitet:
Man könnte natürlich auch einfach

Code:
int count = (Integer.parseInt(nummer.substring(3,7))) + 1;

nehmen. Und das Aufüllen mit Nullen nicht vergessen...
 
Ja klar gehts auch so.^^
Ob nun eine extra Zeile für count++ oder für +1 am Ende vom Parsen.... aber ++ geht hier definitiv vorne und hinten nicht.
 
darkarchon schrieb:
Aber Integer.parseInt gibt doch auf alle Fälle ein int zurück - entsprechend sollte man das auch erhöhen können ohne Probleme? Wenns nicht parsebar ist gibt es ne NumberFormatException…

Nope, du brauchst für das Inkrementieren eine Variable mit festgelegter Speicheradresse (LValue).
Beim Parsen hast du jeglich den RValue, also noch ohne festgelegter Speicheradresse. Erst wenn du es zuweist, dann hast du nen LValue.
(Hab ich das so richtig zusammenbekommen, 0o)

Also du kannst nichts inkrementieren, was nicht ,,vorhanden ist''.

Deine Code, darkarchon, liest so in etwa so : 32 = 32 +1
Und das ergibt natürlich keinen Sinn und gibt zurecht nen Fehler.
 
Zuletzt bearbeitet:
Wollte mich nur kurz zurückmelden und sagen, dass es geklappt hat. Danke für die Tips und die Diskussion. Schlussendlich habe ich die Substring wohl 5 Zeilen zu weit geschrieben und wo ich es früher positioniert habe, hat es ohne Probleme funktioniert. Dafür haben mich jetzt 25 Zeilen Code 3 Tage getresst :p
 
Zurück
Oben