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.