Fjern eller udskift en del af en streng i Java

1. Oversigt

I denne vejledning vil vi se på forskellige måder, vi kan fjerne eller udskifte en del af en Snor i Java.

Vi undersøger fjernelse og / eller udskiftning af en substring ved hjælp af en Snor API og derefter bruge en StringBuilder API og til sidst ved hjælp af StringUtils klasse af Apache Commons-bibliotek.

Som en bonus, vi ser også på at erstatte en eksakt word ved hjælp af String API og Apache Commons RegExUtils klasse.

2. Snor API

En af de enkleste og ligefremme metoder til udskiftning af en substring er at bruge erstatte, erstatte Alle eller erstatte første af en Strengklasse.

Det erstatte() metoden tager to argumenter - mål- og erstatningstekst:

String master = "Hello World Baeldung!"; Strengmål = "Baeldung"; Udskiftning af streng = "Java"; Streng behandlet = master.replace (mål, erstatning); assertTrue (processed.contains (udskiftning)); assertFalse (processed.contains (target));

Ovenstående uddrag giver dette output:

Hej verden Java!

Hvis der kræves et regulært udtryk ved valg af mål, så erstatteAlle () eller erstatte første () skal være den valgte metode. Som deres navn antyder, erstatteAlle () erstatter hver matchet begivenhed, mens erstatte første () erstatter den første matchede forekomst:

String master2 = "Velkommen til Baeldung, Hello World Baeldung"; Streng regexTarget = "(Baeldung) $"; Streng behandlet2 = master2.replaceAll (regexTarget, erstatning); assertTrue (processed2.endsWith ("Java"));

Værdien af behandlet2 vil være:

Velkommen til Baeldung, Hello World Java

Det er fordi regex leveres som regexTarget vil kun matche den sidste forekomst af Baeldung. I alle eksemplerne ovenfor kan vi bruge en tom erstatning, og den fjerner effektivt a mål fra en mestre.

3. StringBuilder API

Vi kan også manipulere tekst i Java ved hjælp af StringBuilder klasse. De to metoder her er slet () og erstatte().

Vi kan konstruere en instans af en StringBuilder fra en eksisterende Snor og brug derefter de nævnte metoder til at udføre Snor manipulation som ønsket:

String master = "Hello World Baeldung!"; Strengmål = "Baeldung"; Strengudskiftning = "Java"; int startIndex = master.indexOf (mål); int stopIndex = startIndex + target.length (); StringBuilder builder = ny StringBuilder (master);

Nu kan vi fjerne mål med slet ():

builder.delete (startIndex, stopIndex); assertFalse (builder.toString (). indeholder (mål));

Vi kan lige så godt bruge erstatte() for at opdatere masteren:

builder.replace (startIndex, stopIndex, erstatning); assertTrue (builder.toString (). indeholder (erstatning));

En tilsyneladende forskel mellem at bruge StringBuilder og Snor API er, at vi skal komme i gang og stopindekset for målSnor os selv.

4. StringUtils Klasse

En anden metode, vi overvejer, er Apache Commons-biblioteket.

Lad os først tilføje den krævede afhængighed af vores projekt:

 org.apache.commons commons-lang3 3.8.1 

Den seneste version af biblioteket kan findes her.

Det StringUtils klasse har metoder til udskiftning af en substring af en Snor:

String master = "Hello World Baeldung!"; Strengmål = "Baeldung"; Udskiftning af streng = "Java"; Streng behandlet = StringUtils.replace (master, target, erstatning); assertTrue (processed.contains (udskiftning));

Der er en overbelastet variant af erstatte() der tager et heltal maks parameter, der bestemmer antallet af forekomster, der skal udskiftes. Vi kan også bruge erstatteIgnoreCase () hvis sagsfølsomhed ikke er et problem:

String master2 = "Hej verden Baeldung!"; Strengmål2 = "baeldung"; Streng behandlet2 = StringUtils.replaceIgnoreCase (master2, target2, erstatning); assertFalse (processed2.contains (target));

5. Udskiftning af nøjagtige ord

I dette sidste eksempel vi lærer at udskifte et nøjagtigt ord inde i en Snor.

Den ligefremme måde at udføre denne udskiftning på er at bruge et regulært udtryk med ordgrænser.

Ordet grænse regulært udtryk er \ b. Omslutning af det ønskede ord i dette regulære udtryk vil kun matche nøjagtige forekomster.

Lad os først se, hvordan man bruger dette regulære udtryk med String API:

String sætning = "En bil er ikke den samme som en vogn, og nogle fly kan bære biler inde i dem!"; Streng regexTarget = "\ bcar \ b"; Streng exactWordReplaced = sætning.replacementAll (regexTarget, "truck");

Det exactWordReplaced streng indeholder:

"En lastbil er ikke det samme som en vogn, og nogle fly kan bære biler inde i dem!"

Kun det nøjagtige ord erstattes. Bemærk bagudvendt skråstreg skal altid undgås, når du arbejder med regulære udtryk i Java.

En alternativ måde at gøre denne udskiftning på er at bruge RegExUtils klasse fra Apache Commons Library, som kan tilføjes som en afhængighed, som vi så i det foregående afsnit:

Streng regexTarget = "\ bcar \ b"; Streng exactWordReplaced = RegExUtils.replaceAll (sætning, regexTarget, "truck"); 

Mens begge metoder giver det samme resultat, afhænger det af vores specifikke scenario, at beslutte, hvilken der skal bruges.

6. Konklusion

Afslutningsvis har vi udforsket mere end en måde at fjerne og erstatte en substring i Java. Den bedste metode til anvendelse afhænger stadig stort set af den aktuelle situation og kontekst.

Som sædvanlig er den komplette kildekode tilgængelig på Github.