replaceall exemple

Jxhnny.lpz

Mitglied
Hallo zusammen,
ich habe eine Frage zum Thema replace commands.

Frage: Wie kann man es umsetzten, ein Wort in einer bestimmten Zeile zu finden und alles dahinter zu ersetzten?
oder 2 Wörter zu finden und alles dazwischen zu ersetzten?

1.) Bsp.: gesuchtes Wort "OutputData" und alles dahinter soll mit "DataTestLine" ersetzt werden.

vorher:

Test
TestLine
Testung
InputData
OutputData=Beispieltest.antwort
Lastline

Nachher:

Test
TestLine
Testung
InputData
OutputData=DataTestLine
Lastline

2.) Bsp.: gesuchte Wörter "OutputData", "LineData" und alles dazwischen soll mit "DataTestLine" ersetzt werden.

vorher:

Test
TestLine
Testung
InputData
OutputData=Beispieltest.antwort.LineData
Lastline

Nachher:

Test
TestLine
Testung
InputData
OutputData=DataTestLine.LineData
Lastline

Ich entschuldige mich für das etwas unverständliche Beispiel.
Trotzdem freu ich mich für jeden Vorschlag und bin dankbar an jeden der wenigstens mir versucht hat zu helfen.

LG
 
Die Methoden replaceAll / replaceFirst nehmen reguläre Ausdrücke. Damit kannst Du da auch Dinge wie .* nehmen.

Bsp.: gesuchtes Wort "OutputData" und alles dahinter soll mit "DataTestLine" ersetzt werden.
myString.replaceFirst("OutputData.*","");
Bsp.: gesuchte Wörter "OutputData", "LineData" und alles dazwischen soll mit "DataTestLine" ersetzt werden.
myString.replaceFirst("OutputData.*LineData","DataTestLine");

Edit: Zur Erläuterung:
Der . im Regulären Ausdruck steht für ein beliebiges Zeichen
Das * bedeutet, dass der letzte Ausdruck (hier der .) beliebig of (also 0-n mal) vorkommen darf.
Dann noch: Reguläre Ausdrücke sind per default erst einmal "greedy", also bei einem "OutputDataXXXLineDataXXXLineData" würde alles genommen und nicht beim ersten LineData aufgehört. (Kann man ändern, aber das führt jetzt zu weit!)

Reguläre Ausdrücke testen: regex101.com
 
Die Methoden replaceAll / replaceFirst nehmen reguläre Ausdrücke. Damit kannst Du da auch Dinge wie .* nehmen.


myString.replaceFirst("OutputData.*","");

myString.replaceFirst("OutputData.*LineData","DataTestLine");

Edit: Zur Erläuterung:
Der . im Regulären Ausdruck steht für ein beliebiges Zeichen
Das * bedeutet, dass der letzte Ausdruck (hier der .) beliebig of (also 0-n mal) vorkommen darf.
Dann noch: Reguläre Ausdrücke sind per default erst einmal "greedy", also bei einem "OutputDataXXXLineDataXXXLineData" würde alles genommen und nicht beim ersten LineData aufgehört. (Kann man ändern, aber das führt jetzt zu weit!)

Reguläre Ausdrücke testen: regex101.com
vielen dank für die Hilfe. Ist eine gut verständliche Erklärung
 
Wenn Du andere Möglichkeiten suchst, dann bleibt immer, sich sowas selbst zu schreiben. Die Klasse String bietet ja genug Möglichkeiten um sowas selbst zu bauen.
 
Welche Möglichkeiten schweben dir denn noch vor?
Sind die beiden Aufgabenpunkte nicht erfüllt?
Anm: Wobei du bei der Aufgabenstellung einen Fehler gemacht hast. Es muss alles nach "OutputData=" ersetzt werden und nicht nach "OutputData", ebenso vor ".LineData" und nicht "LineData", also
Java:
"OutputData=.*\\.LineData"
 

Zurück
Oben