Ich habe einen bestimmten String der ungefähr so ausschaut: "Testlog-2011-11-07-1.log". Von der Länge her ist er immer gleich. Jetzt möchte ich aber in einer Schleife die letzte Endung (in diesem Fall die "1" ) hochzählen könnnen, also "Testlog-2011-11-07-2.log" und "Testlog-2011-11-07-3.log" usw.
Mit indexOf komm ich genau zur richtigen Stelle aber wie les ich so den Inhalt aus, dass ich ihn anschließend hochzählen kann?
Wenn du willst, gehts - wie des öfteren - mit etwas Regex Magie
Java:
String inputPart = input.replaceFirst("^.*?(\\-\\d+){3}\\-(\\d+)","$1");int value =Integer.parseInt(inputPart)+1;
Wenn du allerdings einfach ein neues File - welches noch nicht existiert - erstellen willst, dann lauf so lange durch die Dateinamen (mit 1 beginnend), bis dein erstelltes File nicht existiert.
last = rs_1.getString(1);Integer.parseString(last);
"last" hab ich als String deklariert. Und mit dem getString(1) hol ich mir einen Eintrag aus einer DB. Wenn ich jetzt aber Integer.parseString(last) ausführen will heißt es "the method is undefined for the type integer" ?!
Exception in thread "main" java.lang.NumberFormatException: For input string: "-07.log"
at java.lang.NumberFormatException.forInputString(Unknown Source)
Da ist wohl zuviel unverständliche Magie drin ...
Ich wollte den String mit
Code:
input.split("-|.")
in die Teile auftrennen um den danach wieder zusammenzubauen aber der . geht nicht
Ups, da hab ich mich ganz vertan. Da sieht man, dass ich den Code gar nicht mehr teste, welchen ich poste
Natürlich muss erstens Gruppe 2 und nicht Gruppe 1 selektiert werden (bin mir gewöhnt, dass diese einfachen Regex sozusagen nie Groups haben, da kann ich also meistens [c]$1[/c] nehmen), und der Matcher muss auch bis ans Stringende kommen. Also so:
Regex ist extrem schwierig zu verstehen (ich kenn regular expressions schon länger als es Java gibt! All die shells, sed ... jede Applikation hat eine andere Notation) Aus Überlegungen zur Wartbarkeit rate ich dringend davon ab, wenn es nicht ZWINGENDE Gründe gibt regex einzusetzen
Was meinst du - ich hab wirklich danach gesucht warum filename.split("-|."); nicht geht
split"-" tut, split "." nicht - ???:L
Das erachte ich nicht mehr als OT - das gäbe eine weitere Lösungsmöglichkeit die Ziffer zu isolieren.
Im Zweifelsfall lieber mehr als weniger escapen. Ein [c]split("\\-|\\.")[/c] wird sicher funktionieren. Ein [c]split("-|\\.")[/c] warscheinlich auch. Ein [c]split("[-.]")[/c] wohl auch, und wer auf Nummer sicher gehen will von mir aus auch ein [c]split("[\\-\\.]")[/c] wobei letzteres (Die Escapezeichen in [c]\\.[c]) in Aufzählungen unnötig ist.
Danke für deinen Hinweis. Aber ist dann diese Gruppe nicht auch non-captured im gesamten Regex, d.h. dieser Teil des Strings bleibt bestehen? Hab ich immer so interpretiert...
Ich würde bei der Split-Variante eindeutig zu [c][-.][/c] tendieren.