Entfernen oder Ersetzen eines Teils eines Strings in Java

Entfernen oder Ersetzen eines Teils eines Strings in Java

1. Überblick

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

Wir werden untersuchen, wie Sie einen Teilstring mithilfe einerString-API entfernen und / oder ersetzen, dann eineStringBuilder-API verwenden und schließlich dieStringUtils-Klasse der Apache Commons-Bibliothek verwenden.

Als Bonuswe’ll also look into replacing an exact word using the String API and the Apache Commons RegExUtils class.

2. String API

Eine der einfachsten und einfachsten Methoden zum Ersetzen eines Teilstrings ist die Verwendung vonreplace, replaceAll orreplaceFirst vonString class.

Die Methodereplace()verwendet zwei Argumente - Ziel- und Ersatztext:

String master = "Hello World example!";
String target = "example";
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, solltenreplaceAll() oderreplaceFirst() die Methode der Wahl sein. Wie der Name schon sagt, ersetztreplaceAll() will jedes übereinstimmende Vorkommen, währendreplaceFirst() das erste übereinstimmende Vorkommen ersetzt:

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

Der Wert vonprocessed2 ist:

Welcome to example, Hello World Java

Dies liegt daran, dass der alsregexTarget angegebene reguläre Ausdruck nur mit dem letzten Vorkommen vonexample. In all examples given above, we can use an empty replacement and it’ll effectively remove a target from a master übereinstimmt.

3. StringBuilder API

Wir können Text in Java auch mit derStringBuilder-Klasse bearbeiten. Die beiden Methoden hier sinddelete() undreplace().

Wir können eine Instanz vonStringBuilder  aus einem vorhandenenString erstellen und dann die genannten Methoden verwenden, um die Manipulation vonStringwie gewünscht durchzuführen:

String master = "Hello World example!";
String target = "example";
String replacement = "Java";

int startIndex = master.indexOf(target);
int stopIndex = startIndex + target.length();

StringBuilder builder = new StringBuilder(master);

Jetzt können wir dietarget mit dendelete() entfernen:

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

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

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

Ein offensichtlicher Unterschied zwischen der Verwendung vonStringBuilder und der API vonStringbesteht darin, dass wir den Start- und Stoppindex vontargetStringelbst 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 unterhere.

DieStringUtils -Skala verfügt über Methoden zum Ersetzen eines Teilstrings vonString:

String master = "Hello World example!";
String target = "example";
String replacement = "Java";

String processed = StringUtils.replace(master, target, replacement);
assertTrue(processed.contains(replacement));

Es gibt eine überladene Variante vonreplace(), die einen ganzzahligenmax-Parameter verwendet, der die Anzahl der zu ersetzenden Vorkommen bestimmt. We can also use the replaceIgnoreCase() if case-sensitivity is not a concern:

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

5. Genaue Wörter ersetzen

In diesem letzten Beispielwe’ll learn how to replace an exact word inside a String.

Der einfache Weg, diese Ersetzung durchzuführen, istusing a regular expression mit Wortgrenzen.

The word boundary regular expression is . Wenn Sie das gewünschte Wort in diesen regulären Ausdruck einfügen, werden nur exakte Vorkommen berücksichtigt.

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 ZeichenfolgeexactWordReplacedenthält:

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

Only the exact word will be replaced. Hinweisbackward slash always needs to be escaped bei der Arbeit mit regulären Ausdrücken in Java.

Eine alternative Möglichkeit, diese Ersetzung durchzuführen, ist die Verwendung der KlasseRegExUtilsaus der Apache Commons Library, die als Abhängigkeit hinzugefügt werden kann, wie wir im vorherigen Abschnitt gesehen haben:

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

Während beide Methoden das gleiche Ergebnis liefern, hängt die Entscheidung, welche Methode 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, um sich zu bewerben, hängt immer noch stark von der aktuellen Situation und dem Kontext ab.

Wie üblich ist der vollständige Quellcodeover on Github verfügbar.