Regularni izrazi s i s + na Javi

1. Pregled

Zamjena niza je standardna operacija kada obrađujemo nizove na Javi.

Zahvaljujući zgodnim zamjeni sve() metoda u Niz klase, lako možemo izvršiti zamjenu niza regularnim izrazima. Međutim, ponekad izrazi mogu zbuniti, na primjer, \ s i \ s +.

U ovom ćemo kratkom vodiču kroz primjere pogledati razliku između dva regularna izraza.

2. Razlika između \ s i \ s +

Regularni izraz \ s je unaprijed definirana klasa znakova. Označava jedan razmak. Pregledajmo skup praznih znakova:

[\ t \ n \ x0B \ f \ r]

Znak plus + je pohlepni kvantifikator, što znači jedan ili više puta. Na primjer, izraz X + odgovara jednom ili više x likova.

Stoga, regularni izraz \ s odgovara jednom razmaku, dok \s + odgovarat će jednom ili više razmaka.

3. zamjeni sve() S nepraznom zamjenom

Naučili smo značenja regularnih izraza \ s i \ s +.

Sada, hajde da pogledamo kako zamjeni sve() metoda ponaša se različito s ova dva regularna izraza.

Za ulazne tekstove koristit ćemo niz za sve primjere:

String INPUT_STR = "Tekst s razmacima!";

Pokušajmo proći \ s prema zamjeni sve() metoda kao argument:

Rezultat niza = INPUT_STR.replaceAll ("\ s", "_"); assertEquals ("Tekst ___ s _____ razmacima! ___", rezultat);

The zamjeni sve() metoda pronalazi pojedinačne razmake i zamjenjuje svako podudaranje podvlakom. U ulaznom tekstu imamo jedanaest razmaka. Tako će se dogoditi jedanaest zamjena.

Dalje, proslijedimo regularni izraz \ s + prema zamjeni sve() metoda:

Rezultat niza = INPUT_STR.replaceAll ("\ s +", "_"); assertEquals ("Text_With_Whitespaces! _", rezultat);

Zbog pohlepnog kvantifikatora +, zamjeni sve() metoda podudarat će se s najdužim nizom susjednih razmaka i zamijeniti svako podudaranje podvlakom.

U našem ulaznom tekstu imamo tri niza susjednih razmaka. Stoga će svaka od tri postati donja crta.

4. zamjeni sve() S praznom zamjenom

Još jedna uobičajena upotreba zamjeni sve() metoda je uklanjanje podudarnih obrazaca iz ulaznog teksta. Obično to radimo tako da proslijedimo prazan niz kao zamjenu metodi.

Pogledajmo kakav ćemo rezultat dobiti ako uklonimo razmake pomoću znaka zamjeni sve() metoda s \ s regularni izraz:

Rezultat niza1 = INPUT_STR.replaceAll ("\ s", ""); assertEquals ("TextWithWhitespaces!", rezultat1);

Sada ćemo proslijediti drugi regularni izraz \ s + prema zamjeni sve() metoda:

Rezultat niza2 = INPUT_STR.replaceAll ("\ s +", ""); assertEquals ("TextWithWhitespaces!", rezultat2); 

Budući da je zamjena prazan niz, to dvoje zamjeni sve() pozivi daju isti rezultat, iako dva regularna izraza imaju različita značenja:

assertEquals (rezultat1, rezultat2);

Ako usporedimo to dvoje zamjeni sve() poziva, onaj sa \ s + je učinkovitiji. To je zato što posao obavlja sa samo tri zamjene dok je poziv sa \ s odradit će jedanaest zamjena.

5. Zaključak

U ovom kratkom članku saznali smo o regularnim izrazima \ s i \ s +.

Također smo vidjeli kako zamjeni sve() metoda ponašala se različito s dva izraza.

Kao i uvijek, kôd je dostupan na GitHub-u.