Entfernen oder Ersetzen eines Teils eines Strings in Java

1. Übersicht

In diesem Tutorial werden verschiedene Möglichkeiten untersucht, wie wir einen Teil eines Strings in Java entfernen oder ersetzen können .

Wir werden untersuchen, wie Sie einen Teilstring mithilfe einer String- API entfernen und / oder ersetzen , dann eine StringBuilder- API verwenden und schließlich die StringUtils- Klasse der Apache Commons-Bibliothek verwenden.

Als Bonus werden wir auch versuchen , ein genaues Wort mithilfe der String-API und der Apache Commons RegExUtils- Klasse zu ersetzen .

2. String- API

Eine der einfachsten und einfachsten Methoden zum Ersetzen eines Teilstrings ist die Verwendung von replace, replaceAll oder replaceFirst einer String-Klasse.

Die Methode replace () verwendet zwei Argumente - Zieltext und Ersatztext:

String master = "Hello World Baeldung!"; String target = "Baeldung"; String replacement = "Java"; String processed = master.replace(target, replacement); assertTrue(processed.contains(replacement)); assertFalse(processed.contains(target));

Das obige Snippet liefert diese Ausgabe:

Hello World Java!

Wenn bei der Auswahl des Ziels ein regulärer Ausdruck erforderlich ist, sollte replaceAll () oder replaceFirst () die Methode der Wahl sein. Wie der Name schon sagt, ersetzt replaceAll () jedes übereinstimmende Vorkommen, während replaceFirst () das erste übereinstimmende Vorkommen ersetzt:

String master2 = "Welcome to Baeldung, Hello World Baeldung"; String regexTarget = "(Baeldung)$"; String processed2 = master2.replaceAll(regexTarget, replacement); assertTrue(processed2.endsWith("Java"));

Der Wert von process2 ist:

Welcome to Baeldung, Hello World Java

Dies liegt daran, dass der als regexTarget bereitgestellte Regex nur mit dem letzten Vorkommen von Baeldung übereinstimmt. In allen oben angegebenen Beispielen können wir einen leeren Ersatz verwenden, der ein Ziel effektiv von einem Master entfernt .

3. StringBuilder- API

Wir können Text auch in Java mit der StringBuilder- Klasse bearbeiten . Die beiden Methoden hier sind delete () und replace () .

Wir können eine Instanz eines StringBuilder aus einem vorhandenen String erstellen und dann die genannten Methoden verwenden, um die String- Manipulation wie gewünscht durchzuführen :

String master = "Hello World Baeldung!"; String target = "Baeldung"; String replacement = "Java"; int startIndex = master.indexOf(target); int stopIndex = startIndex + target.length(); StringBuilder builder = new StringBuilder(master);

Jetzt können wir das Ziel mit delete () entfernen :

builder.delete(startIndex, stopIndex); assertFalse(builder.toString().contains(target));

Wir können auch das replace () verwenden , um den Master zu aktualisieren:

builder.replace(startIndex, stopIndex, replacement); assertTrue(builder.toString().contains(replacement));

Ein offensichtlicher Unterschied zwischen der Verwendung des StringBuilder und der String- API besteht darin, dass wir den Start- und den Stoppindex des Ziel- Strings selbst ermitteln müssen.

4. StringUtils- Klasse

Eine andere Methode, die wir in Betracht ziehen werden, ist die Apache Commons-Bibliothek.

Fügen wir zunächst die erforderliche Abhängigkeit zu unserem Projekt hinzu:

 org.apache.commons commons-lang3 3.8.1 

Die neueste Version der Bibliothek finden Sie hier.

Die StringUtils Klasse verfügt über Methoden für einen Teil eines Ersatz String :

String master = "Hello World Baeldung!"; String target = "Baeldung"; String replacement = "Java"; String processed = StringUtils.replace(master, target, replacement); assertTrue(processed.contains(replacement));

Es gibt eine überladene Variante von replace () , die einen ganzzahligen max- Parameter verwendet, der die Anzahl der zu ersetzenden Vorkommen bestimmt. Wir können auch replaceIgnoreCase () verwenden, wenn die Groß- und Kleinschreibung keine Rolle spielt :

String master2 = "Hello World Baeldung!"; String target2 = "baeldung"; String processed2 = StringUtils.replaceIgnoreCase(master2, target2, replacement); assertFalse(processed2.contains(target));

5. Genaue Wörter ersetzen

In diesem letzten Beispiel erfahren Sie, wie Sie ein genaues Wort in einem String ersetzen .

Die einfache Möglichkeit, diese Ersetzung durchzuführen, besteht darin, einen regulären Ausdruck mit Wortgrenzen zu verwenden.

Der reguläre Ausdruck der Wortgrenze ist \ b . Das Einschließen des gewünschten Wortes in diesen regulären Ausdruck entspricht nur den genauen Vorkommen.

Lassen Sie uns zunächst sehen, wie dieser reguläre Ausdruck mit der String-API verwendet wird:

String sentence = "A car is not the same as a carriage, and some planes can carry cars inside them!"; String regexTarget = "\\bcar\\b"; String exactWordReplaced = sentence.replaceAll(regexTarget, "truck");

Die genaue Zeichenfolge " WordReplaced" enthält:

"A truck is not the same as a carriage, and some planes can carry cars inside them!"

Nur das genaue Wort wird ersetzt. Beachten Sie, dass bei der Arbeit mit regulären Ausdrücken in Java immer ein Schrägstrich maskiert werden muss.

Eine alternative Möglichkeit, diese Ersetzung durchzuführen, ist die Verwendung der RegExUtils- Klasse aus der Apache Commons Library, die wie im vorherigen Abschnitt beschrieben als Abhängigkeit hinzugefügt werden kann:

String regexTarget = "\\bcar\\b"; String exactWordReplaced = RegExUtils.replaceAll(sentence, regexTarget, "truck"); 

Während beide Methoden das gleiche Ergebnis liefern, hängt die Entscheidung, welche verwendet werden soll, von unserem spezifischen Szenario ab.

6. Fazit

Zusammenfassend haben wir mehr als eine Möglichkeit untersucht, einen Teilstring in Java zu entfernen und zu ersetzen. Die beste Methode zur Anwendung hängt noch weitgehend von der aktuellen Situation und dem aktuellen Kontext ab.

Wie üblich ist der vollständige Quellcode auf Github verfügbar.