Odstráňte alebo vymeňte časť reťazca v Jave

1. Prehľad

V tomto výučbe sa pozrieme na rôzne spôsoby, ako môžeme odstrániť alebo nahradiť časť a String v Jave.

Preskúmame odstránenie a / alebo nahradenie podreťazca pomocou a String API, potom pomocou a StringBuilder API a nakoniec pomocou StringUtils trieda knižnice Apache Commons.

Ako bonus takisto sa pozrieme na nahradenie súboru presne slovo pomocou String API a Apache Commons RegExUtils trieda.

2. String API

Jednou z najjednoduchších a najpriamejších metód výmeny podreťazca je použitie vymeniť, vymeniť všetko alebo nahradiťPrvý a Trieda strún.

The nahradiť () metóda má dva argumenty - cieľový a náhradný text:

String master = "Hello World Baeldung!"; Cieľ reťazca = "Baeldung"; Výmena reťazca = "Java"; Reťazec spracovaný = master.replace (terč, výmena); assertTrue (spracované. obsahuje (náhradné)); assertFalse (spracované.obsahuje (cieľ));

Vyššie uvedený úryvok prinesie tento výstup:

Ahoj svet Java!

Ak sa pri výbere cieľa vyžaduje regulárny výraz, potom nahradiť všetko() alebo replaceFirst () by mala byť metóda voľby. Ako už z ich názvu vyplýva, nahradiť všetko() nahradí každý zhodný výskyt, zatiaľ čo replaceFirst () nahradí prvý zhodný výskyt:

String master2 = "Vitajte v Baeldungu, Hello World Baeldung"; Reťazec regexTarget = "(Baeldung) $"; Reťazec spracovaný2 = master2.replaceAll (regexTarget, výmena); assertTrue (processing2.endsWith ("Java"));

Hodnota spracované2 bude:

Vitajte v Baeldung, Hello World Java

Je to preto, že regulárny výraz dodávaný ako regexTarget sa bude zhodovať iba s posledným výskytom Baeldung. Vo všetkých príkladoch uvedených vyššie môžeme použiť prázdnu náhradu, ktorá efektívne odstráni a cieľ od a pán.

3. StringBuilder API

S textom v Jave tiež môžeme manipulovať pomocou StringBuilder trieda. Existujú dve metódy odstrániť () a nahradiť ().

Môžeme zostrojiť inštanciu a StringBuilder z existujúceho String a potom použite uvedené metódy na vykonanie String manipulácia podľa želania:

String master = "Hello World Baeldung!"; Cieľ reťazca = "Baeldung"; Výmena reťazca = "Java"; int startIndex = master.indexOf (cieľ); int stopIndex = startIndex + target.length (); Staviteľ StringBuilder = nový StringBuilder (hlavný);

Teraz môžeme odstrániť cieľ s odstrániť ():

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

Môžeme tiež použiť nahradiť () na aktualizáciu predlohy:

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

Jeden zjavný rozdiel medzi používaním StringBuilder a String API je, že musíme získať začiatočný a konečný index súboru cieľString sami seba.

4. StringUtils Trieda

Ďalšou metódou, ktorú zvážime, je knižnica Apache Commons.

Najskôr do projektu pridajme požadovanú závislosť:

 org.apache.commons commons-lang3 3.8.1 

Najnovšiu verziu knižnice nájdete tu.

The StringUtils trieda má metódy na nahradenie podreťazca a String:

String master = "Hello World Baeldung!"; Cieľ reťazca = "Baeldung"; Výmena reťazca = "Java"; Reťazec spracovaný = StringUtils.replace (master, target, replacement); assertTrue (spracované. obsahuje (náhradné));

Existuje preťažený variant nahradiť () ktoré berie celé číslo max parameter, ktorý určuje počet výskytov, ktoré sa majú nahradiť. Môžeme tiež použiť replaceIgnoreCase () ak nerozlišuje veľkosť a veľkosť písmen:

String master2 = "Hello World Baeldung!"; Reťazec target2 = "baeldung"; String processing2 = StringUtils.replaceIgnoreCase (master2, target2, replacement); assertFalse (spracované2.obsahuje (cieľ));

5. Nahradenie presných slov

V tomto poslednom príklade naučíme sa, ako nahradiť presné slovo vo vnútri a String.

Priamym spôsobom tejto náhrady je použitie regulárneho výrazu s hranicami slov.

Slovo hraničný regulárny výraz je \ b. Uzavretie požadovaného slova vo vnútri tohto regulárneho výrazu bude zodpovedať iba presným výskytom.

Najprv sa pozrime, ako používať tento regulárny výraz s rozhraním String API:

Reťazec vety = "Automobil nie je to isté ako kočiar a niektoré lietadlá môžu vo vnútri prevážať autá!"; Reťazec regexTarget = "\ bcar \ b"; Reťazec exactWordReplaced = vety.replaceAll (regexTarget, "nákladné auto");

The exactWordReplaced reťazec obsahuje:

„Kamión nie je to isté ako kočiar a niektoré lietadlá môžu vo vnútri prevážať autá!“

Iba presné slovo bude nahradené. Upozorňujeme, že pri práci s regulárnymi výrazmi v jazyku Java je vždy potrebné dodržať lomku.

Alternatívnym spôsobom tejto výmeny je použitie RegExUtils triedy z knižnice Apache Commons, ktorú je možné pridať ako závislosť, ako sme videli v predchádzajúcej časti:

Reťazec regexTarget = "\ bcar \ b"; Reťazec exactWordReplaced = RegExUtils.replaceAll (veta, regexTarget, "nákladné auto"); 

Aj keď obe metódy prinesú rovnaký výsledok, rozhodovanie o tom, ktorá z nich by sa mala použiť, bude závisieť od nášho konkrétneho scenára.

6. Záver

Na záver sme preskúmali viac ako jeden spôsob odstránenia a výmeny podreťazca v Jave. Najlepší spôsob uplatňovania stále do veľkej miery závisí od aktuálnej situácie a kontextu.

Celý zdrojový kód je ako obvykle k dispozícii na serveri Github.


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