Uklonite ili zamijenite dio niza u Javi
1. Pregled
U ovom uputstvu tražit ćemo razna sredstva kako možemo ukloniti ili zamijeniti dio a Niz na Javi.
Istražit ćemo uklanjanje i / ili zamjenu podniza pomoću a Niz API, a zatim pomoću a StringBuilder API i konačno korištenje StringUtils razred biblioteke Apache Commons.
Kao bonus, također ćemo razmotriti zamjenu točno riječ koristeći String API i Apache Commons RegExUtils razred.
2. Niz API
Jedna od najjednostavnijih i najjednostavnijih metoda zamjene podniza je upotreba zamijeniti, zamijenitiSve ili replaceFirst od a Žičani razred.
The zamijeniti() metoda uzima dva argumenta - ciljni i zamjenski tekst:
String master = "Hello World Baeldung!"; Niz cilja = "Baeldung"; Zamjena niza = "Java"; Niz obrađen = master.replace (cilj, zamjena); assertTrue (obrađeno.sadrži (zamjena)); assertFalse (obradeno.sadrži (cilj));
Gornji isječak dobit će ovaj rezultat:
Pozdrav svijete Java!
Ako je pri odabiru cilja potreban regularni izraz, tada se zamjeni sve() ili replaceFirst () trebala biti metoda izbora. Kao što im i ime govori, zamjeni sve() će zamijeniti svaku podudarnu pojavu, dok će replaceFirst () zamijenit će prvu podudarnu pojavu:
String master2 = "Dobro došli u Baeldung, Hello World Baeldung"; Niz regexTarget = "(Baeldung) $"; Niz obrađen2 = master2.replaceAll (regexTarget, zamjena); assertTrue (processing2.endsWith ("Java"));
Vrijednost obrađena2 bit će:
Dobrodošli u Baeldung, Hello World Java
To je zato što je regularni izraz isporučen kao regexTarget podudarat će se samo s posljednjom pojavom Baeldung. U svim gore navedenim primjerima možemo koristiti praznu zamjenu i ona će učinkovito ukloniti a cilj od ovladati; majstorski.
3. StringBuilder API
Također možemo manipulirati tekstom na Javi koristeći StringBuilder razred. Dvije su metode ovdje izbrisati() i zamijeniti().
Možemo konstruirati primjerak a StringBuilder od postojećeg Niz a zatim upotrijebite spomenute metode za izvođenje Niz manipulacija po želji:
String master = "Hello World Baeldung!"; Niz cilja = "Baeldung"; Zamjena niza = "Java"; int startIndex = master.indexOf (target); int stopIndex = startIndex + target.length (); StringBuilder builder = novi StringBuilder (master);
Sada možemo ukloniti cilj s izbrisati():
builder.delete (startIndex, stopIndex); assertFalse (builder.toString (). sadrži (cilj));
Možemo i koristiti zamijeniti() da biste ažurirali master:
builder.replace (startIndex, stopIndex, zamjena); assertTrue (builder.toString (). sadrži (zamjena));
Jedna prividna razlika između StringBuilder i Niz API je da moramo dobiti indeks početka i zaustavljanja indeksa ciljNiz sebe.
4. StringUtils Razred
Sljedeća metoda koju ćemo razmotriti je biblioteka Apache Commons.
Prvo, dodajmo potrebnu ovisnost našem projektu:
org.apache.commons commons-lang3 3.8.1
Najnoviju verziju knjižnice možete pronaći ovdje.
The StringUtils klasa ima metode za zamjenu podniza a Niz:
String master = "Hello World Baeldung!"; Niz cilja = "Baeldung"; Zamjena niza = "Java"; Niz obrađen = StringUtils.replace (master, target, replacement); assertTrue (obrađeno.sadrži (zamjena));
Postoji preopterećena varijanta zamijeniti() koji uzima cijeli broj maks parametar, koji određuje broj pojava koje treba zamijeniti. Također možemo koristiti replaceIgnoreCase () ako osjetljivost na velika i mala slova ne zabrinjava:
String master2 = "Pozdrav svjetski baeldung!"; Niz cilja2 = "baeldung"; Niz obrađen2 = StringUtils.replaceIgnoreCase (master2, target2, replacement); assertFalse (obradjeno2.sadrži (cilj));
5. Zamjena točnih riječi
U ovom posljednjem primjeru, naučit ćemo kako zamijeniti točnu riječ unutar Niz.
Izravni način izvođenja ove zamjene je upotreba regularnog izraza s granicama riječi.
Regularni izraz riječi granica je \ b. Zatvaranje željene riječi unutar ovog regularnog izraza podudarat će se samo s točnim pojavama.
Prvo, pogledajmo kako koristiti ovaj regularni izraz sa String API-jem:
Niz rečenice = "Automobil nije isto što i kočija, a neki zrakoplovi mogu u sebi nositi automobile!"; Niz regexTarget = "\ bcar \ b"; Niz točanWordReplaced = rečenica.replaceAll (regexTarget, "kamion");
The absoluteWordReplaced niz sadrži:
"Kamion nije isto što i kočija, a neki zrakoplovi mogu u sebi nositi automobile!"
Zamijenit će se samo točna riječ. Primijetite da se pri radu s regularnim izrazima u Javi uvijek treba izbjeći kosu crtu.
Alternativni način za ovu zamjenu je upotreba datoteke RegExUtils klase iz biblioteke Apache Commons, koja se može dodati kao ovisnost kao što smo vidjeli u prethodnom odjeljku:
Niz regexTarget = "\ bcar \ b"; String absoluteWordReplaced = RegExUtils.replaceAll (rečenica, regexTarget, "kamion");
Iako će obje metode dati isti rezultat, odluka o tome koja će se koristiti ovisit će o našem specifičnom scenariju.
6. Zaključak
Zaključno, istražili smo više načina uklanjanja i zamjene podniza u Javi. Najbolja metoda za primjenu još uvijek uvelike ovisi o trenutnoj situaciji i kontekstu.
Kao i obično, cjeloviti izvorni kod dostupan je na Githubu.