Fjern eller erstatt en del av en streng i Java

1. Oversikt

I denne opplæringen skal vi se på forskjellige måter vi kan fjerne eller erstatte deler av en String i Java.

Vi vil utforske fjerning og / eller erstatning av en substring ved hjelp av a String API, og deretter bruke en StringBuilder API og til slutt bruker StringUtils klasse av Apache Commons-biblioteket.

Som en bonus, vi vil også se på å erstatte en nøyaktig word ved hjelp av String API og Apache Commons RegExUtils klasse.

2. String API

En av de enkleste og greie metodene for å bytte ut en substring er å bruke erstatte, erstatte Alle eller erstatte første av en Strengklasse.

De erstatte() metoden tar to argumenter - mål- og erstatningstekst:

String master = "Hello World Baeldung!"; Strengmål = "Baeldung"; Strengerstatning = "Java"; Streng behandlet = master.replace (mål, erstatning); assertTrue (prosessert. inneholder (erstatning)); assertFalse (prosessert. inneholder (mål));

Ovennevnte utdrag vil gi denne utdata:

Hei verden Java!

Hvis det kreves et regulært uttrykk når du velger målet, blir erstatt alle () eller erstatte første () bør være den valgte metoden. Som navnet tilsier, erstatt alle () vil erstatte hver matchet forekomst, mens erstatte første () vil erstatte den første matchede forekomsten:

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

Verdien av behandlet2 vil være:

Velkommen til Baeldung, Hello World Java

Det er fordi regex leveres som regexTarget vil bare matche den siste forekomsten av Baeldung. I alle eksemplene som er gitt ovenfor, kan vi bruke en tom erstatning, og den fjerner effektivt a mål fra en herre.

3. StringBuilder API

Vi kan også manipulere tekst i Java ved hjelp av StringBuilder klasse. De to metodene her er slett () og erstatte().

Vi kan konstruere en forekomst av en StringBuilder fra en eksisterende String og bruk deretter metodene som er nevnt for å utføre String manipulasjon som ønsket:

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

Nå kan vi fjerne mål med slett ():

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

Vi kan like godt bruke erstatte() for å oppdatere masteren:

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

En tilsynelatende forskjell mellom å bruke StringBuilder og String API er at vi må starte og stoppe indeksen til målString oss.

4. StringUtils Klasse

En annen metode vi vil vurdere er Apache Commons-biblioteket.

La oss først legge til den nødvendige avhengigheten til prosjektet vårt:

 org.apache.commons commons-lang3 3.8.1 

Den siste versjonen av biblioteket finner du her.

De StringUtils klasse har metoder for å erstatte en substring av en String:

String master = "Hello World Baeldung!"; Strengmål = "Baeldung"; Strengerstatning = "Java"; Streng behandlet = StringUtils.replace (master, target, erstatning); assertTrue (prosessert. inneholder (erstatning));

Det er en overbelastet variant av erstatte() det tar et heltall maks parameter, som bestemmer antall forekomster som skal erstattes. Vi kan også bruke erstatteIgnoreCase () hvis ikke saksfølsomhet er et problem:

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

5. Erstatte nøyaktige ord

I dette siste eksemplet, vi lærer hvordan du erstatter et eksakt ord inne i String.

Den enkle måten å utføre denne erstatningen på er å bruke et vanlig uttrykk med ordgrenser.

Ordet grense regulært uttrykk er \ b. Å legge inn ønsket ord i dette vanlige uttrykket, vil bare matche eksakte forekomster.

La oss først se hvordan du bruker dette vanlige uttrykket med String API:

Strengsetning = "En bil er ikke det samme som en vogn, og noen fly kan frakte biler inne i dem!"; Streng regexTarget = "\ bcar \ b"; Streng exactWordReplaced = setning.replaceAll (regexTarget, "lastebil");

De exactWordReplaced streng inneholder:

"En lastebil er ikke det samme som en vogn, og noen fly kan frakte biler inne i dem!"

Bare det eksakte ordet blir erstattet. Legg merke til bakover skråstrek må alltid unngås når du arbeider med vanlige uttrykk i Java.

En alternativ måte å gjøre dette på er å bruke RegExUtils klasse fra Apache Commons Library, som kan legges til som en avhengighet som vi så i forrige avsnitt:

Streng regexTarget = "\ bcar \ b"; Streng exactWordReplaced = RegExUtils.replaceAll (setning, regexTarget, "lastebil"); 

Mens begge metodene vil gi det samme resultatet, vil det avhenge av vårt spesifikke scenario å avgjøre hvilken som skal brukes.

6. Konklusjon

Avslutningsvis har vi utforsket mer enn en måte å fjerne og erstatte en substring i Java. Den beste metoden å bruke avhenger fortsatt i stor grad av dagens situasjon og kontekst.

Som vanlig er den komplette kildekoden tilgjengelig på Github.


$config[zx-auto] not found$config[zx-overlay] not found