Replace mit fromIndex

M

Moooni

Gast
Hallo,
ich will in einer Datei bestimmte Konstrukte ersetzen.
Als Beispiel "wort1(wort2)" in "[wort2]".

Deshalb will ich Zeile für Zeile durch die Datei gehen und immer fragen, ob "wort1(" vorhanden ist, wenn ja dann "wort1(" => "[" und das nächste ")" => "]".

Also hab ich ich der API nach den geeigneten Methoden gesucht.

Zum Suchen habe ich "int indexOf(String str, int fromIndex)" gefunden (fromIndex eignet sich gut, um nach einem Vorkommen ein zweites danach zu suchen).
Probleme habe ich aber bei der Replace-Methode
Die mir am geeignetsten erscheint ist folgende: "String replaceFirst(String regex, String replacement)". Damit habe ich aber nur ein Problem, ich kann nicht sagen ab welchem Zeichen er für das Ersetzen suchen soll.
Er darf nämlich nur das erste vorkommende ")" nach "wort1(" durch "[" ersetzen. Da aber auch "irgendwas(" stehen könnte, kann ich ein Replace nicht von anfang an durchlaufen lassen.

Natürlich könnte ich den String nun bei dem Index teilen den ich bei "indexOf" bekommen habe, anschließend das erste ")" ersetzen und zum Schluss wieder zusammenfügen.
Wirklich elegant würde ich dies aber nicht nennen.

Gibt es vielleicht doch eine Möglichkeit dem "repace" ein Startzeichen zu geben?
Danke für eure Hilfe
 

winSharp93

Mitglied
Hallo Moooni,

ansonsten klingt das für mich sehr nach einem Anwendungsfall für Regex, beispielsweise:
Java:
String str = "wort1(wort2)";
str = str.replaceAll("wort1\\(([A-Za-z0-9]+)\\)", "[$1]");

Mit Regex kannst du sozusagen relativ allgemein Zeichenfolgen ersetzen - in dem Beispiel werden alle Groß-, Kleinbuchstaben und Zahlen in der Klammer hinter "wort1" in eckige Klammern eingefügt.

Zu Regex gibt's unzählige Tutorials, z.B. Java Regex Tutorial.
 

mfernau

Bekanntes Mitglied
Erscheint mir ebenfalls ein Kandidat für Regexp. Wenn man sich mal mit der Thematik etwas beschäftigt hat und sich mit der Syntax auseinander gesetzt hat ist das IMHO ein mächtiges Werkzeug.
 

Marco13

Top Contributor
IMHO ist RegEx nicht für Textersetzung gedacht (und auch für vieles anderes nicht, wofür es immer empfohlen wird) - spätestens wenn die Daten mehr als ein paar KB groß sind kommt man auch schnell in den Bereich, wo man Performanceprobleme bekommt... aber ... es steht jedem frei.
 

winSharp93

Mitglied
und auch für vieles anderes nicht, wofür es immer empfohlen wird
Ich sehe es eher genau andersherum: Das Potential von Regex wird leider allzu häufig unterschätzt ;-)
Vor allem spart man sich einiges an Entwicklungsuafwand und kann selbst recht komplizierte Pattern einfach und kompakt formulieren.

spätestens wenn die Daten mehr als ein paar KB groß sind kommt man auch schnell in den Bereich, wo man Performanceprobleme bekommt
"Premature Optimization is the root of all evil" :bae:
Performance ist m.E. einer der Punkte, die man zwar im Hinterkopf behalten sollte, aber von denen man sich nicht hauptsächlich leiten lassen sollte.

Und ja: Auch Regex kann man effizient einsetzen (einfache Pattern mit wenigen Verschachtelungen, möglichst auf Lookbehind- und Lookaheads verzichten und vor allem compilierte Pattern verwenden).
Wenn man die Verarbeitung dann noch parallelisiert, kann der Durchsatz IMHO schon sehr ordentlich sein.

aber ... es steht jedem frei.
Genau.:)
 

Marco13

Top Contributor
Ja, vielleicht spielt es hier in bezug auf die Performance keine Rolle, aber ... vielleicht ist das auch einer der Gründe, warum alle glauben, Java sei langsam ;)
Und ansonsten stimmt es natürlich, dass RegEx sehr mächtig sind, aber ... wenn man manchmal sieht, WAS Leute vorschlagen, mit RegEx zu machen... HTML Parsen/Analysieren ist so ein Kandidat (es geht nicht, aber wird immer wieder empfohlen...) - wie ein Schweizer Taschenmesser: Man kann damit vieles machen, sogar einen dünnen Ast von einem Baum absägen, aber wenn man viele Äste absägen oder sogar einen Baum fällen will, nimmt man doch lieber eine Axt.
Hm. Das Bild ist durch die negative Konnotation des Wortes "Hacken" jetzt vielleicht nicht so geeignet :oops: :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H String-Operation replace() - Zeichenkette verdoppeln Java Basics - Anfänger-Themen 2
F Kurze Frage zu replace() Java Basics - Anfänger-Themen 19
monsterherz Replace mit Scan Java Basics - Anfänger-Themen 20
monsterherz replace Java Basics - Anfänger-Themen 12
GAZ String replace() Elemente tauschen Java Basics - Anfänger-Themen 13
J Replace mit Hilfe von ArrayLists Java Basics - Anfänger-Themen 6
Dimax Erste Schritte String replace alle Zeichen Java Basics - Anfänger-Themen 10
M Verschlüsselung mit replace() Java Basics - Anfänger-Themen 35
F Buchstaben in einem String vertauschen (Ohne replace) Java Basics - Anfänger-Themen 10
D kann man vor dem CSVRecord, replace Anweisung anwenden ? Java Basics - Anfänger-Themen 2
M replace Methode für Buchstaben Java Basics - Anfänger-Themen 29
J .replace mit Arraylisten Java Basics - Anfänger-Themen 4
Ananaskirsche Variablen Replace funktioniert nicht Java Basics - Anfänger-Themen 7
B Regular Expression bei replace Java Basics - Anfänger-Themen 11
M Problem mit Array und replace Java Basics - Anfänger-Themen 3
P Replace zählen Java Basics - Anfänger-Themen 4
P replace[Frage] Java Basics - Anfänger-Themen 2
V String replace ? Java Basics - Anfänger-Themen 6
J Erste Schritte replace von minus Zeichen wird nicht gemacht Java Basics - Anfänger-Themen 7
S string.replace funktioniert nicht Java Basics - Anfänger-Themen 10
U String.replace mit Umlauten Java Basics - Anfänger-Themen 14
N Methoden mehrere replace hintereinander geht nicht ? Java Basics - Anfänger-Themen 2
R String Replace für JUnit Java Basics - Anfänger-Themen 19
V Nochmal Hilfe - Replace Methode Java Basics - Anfänger-Themen 2
B Problem mit replace() Java Basics - Anfänger-Themen 4
I replace(char, char) funktioniert nicht Java Basics - Anfänger-Themen 8
0 String split und replace geht nicht Java Basics - Anfänger-Themen 17
A mehrere replace in einem string Java Basics - Anfänger-Themen 3
H replace funktioniert nicht Java Basics - Anfänger-Themen 4
S String filtern mit replace -> Problem Java Basics - Anfänger-Themen 6
T Regulärer Ausruck mit replace Java Basics - Anfänger-Themen 3
M String.replace Java Basics - Anfänger-Themen 2
M replace html string Java Basics - Anfänger-Themen 3
G String.replace Java Basics - Anfänger-Themen 3
J Find and replace Java Basics - Anfänger-Themen 3
D Strings : XY.replace(); ! Java Basics - Anfänger-Themen 6
D String mit replace bearbeiten Java Basics - Anfänger-Themen 2
G string.replace und charset Java Basics - Anfänger-Themen 2
D Probleme mit der String Methode replace() Java Basics - Anfänger-Themen 4
N String.replace brauch mal Hilfe Java Basics - Anfänger-Themen 2
B Programmcode von replace, split, u.s.w. Java Basics - Anfänger-Themen 3
F Schon wieder replace Java Basics - Anfänger-Themen 7
W Replace - geht das auch kürzer? Java Basics - Anfänger-Themen 4
N replace? Java Basics - Anfänger-Themen 5
R String replace nicht verwenden.alternative gesucht Java Basics - Anfänger-Themen 5
P Replace java 1.1 Java Basics - Anfänger-Themen 4
D replace() Methode in JSP Java Basics - Anfänger-Themen 2
D replace-funktion Java Basics - Anfänger-Themen 2
G sort(int[] a, int fromIndex, int toIndex) Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben