Ersetze mehrere Teilstrings gleichzeitig

8

Sagen wir, ich habe eine Datei, die etwas Text enthält. Es gibt Teilstrings wie "substr1", "substr2", "substr3" usw. darin. Ich muss alle diese Teilstrings durch irgendeinen anderen Text ersetzen, wie "repl1", "repl2", "repl3". In Python würde ich ein Wörterbuch wie folgt erstellen:

%Vor%

und erstellen Sie das Muster, das die Schlüssel mit '|' verbindet, und ersetzen Sie es durch re.sub function. Gibt es einen ähnlich einfachen Weg, dies in Java zu tun?

    
Andriy Yurchuk 05.10.2011, 12:43
quelle

5 Antworten

14

So übersetzt sich Ihr Python-Vorschlag in Java:

%Vor%

Dieser Ansatz macht einen simultanen (d. h. "sofort") Ersatz. Wenn Sie zufällig

haben %Vor%

dann würde dieser Ansatz "a b" -> "b c" im Gegensatz zu den Antworten geben, was darauf hindeutet, dass Sie mehrere Aufrufe an replace oder replaceAll ketten sollten, was "c c" ergeben würde.

(Wenn Sie diesen Ansatz zum programmatischen Erstellen der Regexp verallgemeinern, vergewissern Sie sich, dass Sie Pattern.quote für jedes einzelne Suchwort und Matcher.quoteReplacement für jedes Ersatzwort verwenden.)

    
aioobe 05.10.2011, 12:52
quelle
6

StringUtils.replaceEach im Apache Commons Lang Projekt , aber es funktioniert auf Strings.

    
palacsint 05.10.2011 12:49
quelle
2
%Vor%     
Eng.Fouad 05.10.2011 12:46
quelle
1

Zuerst eine Demonstration des Problems:

%Vor%

Dies soll cats ersetzen = & gt; Hunde und Hunde = & gt; Wellenformen, aber die sequentielle Ersetzung funktioniert auf das Ergebnis der vorherigen Ersetzung, so ist die unglückliche Ausgabe:

  

Ich habe drei Wellensittiche und zwei Wellensittiche.

Hier ist meine Implementierung einer simultanen Ersatzmethode. Es ist einfach zu schreiben mit String.regionMatches :

%Vor%

Testen:

%Vor%

Ausgabe:

  

Ich habe drei Hunde und zwei Wellensittiche.

Außerdem ist es manchmal nützlich, wenn Sie simultan nach dem längsten Spiel suchen. (Die strtr Funktion von PHP macht dies zum Beispiel.) Hier ist meine Implementierung dafür:

%Vor%

Warum würden Sie das brauchen? Beispiel folgt:

%Vor%

Ausgabe:

  

Java ist zu JavaScript wie Ham zu Hamster ist

Wenn wir simultaneousReplace anstelle von simultaneousReplaceLongest verwendet hätten, hätte die Ausgabe "HamScript" anstelle von "Hamster":)

Beachten Sie, dass bei den obigen Methoden die Groß- / Kleinschreibung beachtet wird. Wenn Sie die Groß- / Kleinschreibung nicht beachten müssen, ist es einfach, die obigen Einstellungen zu ändern, da String.regionMatches einen Parameter ignoreCase annehmen kann.

    
Boann 27.11.2013 17:25
quelle
-1
%Vor%     
Balconsky 05.10.2011 12:55
quelle

Tags und Links