Regulárne výrazy s a s + v jazyku Java

1. Prehľad

Substitúcia reťazcov je štandardná operácia, keď spracovávame reťazce v Jave.

Vďaka šikovným nahradiť všetko() metóda v String triedy, môžeme ľahko urobiť substitúciu reťazcov pomocou regulárnych výrazov. Niekedy však môžu byť výrazy mätúce, napríklad \ s a \ s +.

V tomto krátkom návode sa prostredníctvom príkladov pozrieme na rozdiel medzi týmito dvoma regulárnymi výrazmi.

2. Rozdiel medzi \ s a \ s +

Regulárny výraz \ s je preddefinovaná trieda znakov. Označuje jeden prázdny znak. Pozrime sa na skupinu prázdnych znakov:

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

Znamienko plus + je chamtivý kvantifikátor, čo znamená jeden alebo viackrát. Napríklad výraz X + zodpovedá jednému alebo viacerým X znakov.

Preto regulárny výraz \ s sa zhoduje s jedným prázdnym znakom, zatiaľ čo \s + bude zodpovedať jednému alebo viacerým prázdnym znakom.

3. nahradiť všetko() S náhradou, ktorá nie je prázdna

Dozvedeli sme sa významy regulárnych výrazov \ s a \ s +.

Poďme sa teraz pozrieť na to, ako nahradiť všetko() metóda sa pri týchto dvoch regulárnych výrazoch správa inak.

Ako vstupný text pre všetky príklady použijeme reťazec:

Reťazec INPUT_STR = "Text s medzerami!";

Skúsime prejsť \ s do nahradiť všetko() metóda ako argument:

Výsledok reťazca = INPUT_STR.replaceAll ("\ s", "_"); assertEquals ("Výsledok ___ s _____ medzerami! ___");

The nahradiť všetko() metóda vyhľadá jednotlivé medzery a nahradí každú zhodu podčiarkovníkom. Vo vstupnom texte máme jedenásť medzier. Dojde teda k jedenástim náhradníkom.

Ďalej odovzdajme regulárny výraz \ s + do nahradiť všetko() metóda:

Výsledok reťazca = INPUT_STR.replaceAll ("\ s +", "_"); assertEquals ("Text_With_Whitespaces! _", výsledok);

Kvôli lakomému kvantifikátorovi +, nahradiť všetko() metóda zosúladí najdlhšiu sekvenciu súvislých medzier medzi znakmi a nahradí každú zhodu podčiarkovníkom.

Vo vstupnom texte máme tri postupnosti po sebe idúcich medzier. Preto sa každý z troch stane podčiarkovníkom.

4. nahradiť všetko() S prázdnou náhradou

Ďalšie bežné použitie súboru nahradiť všetko() metódou je odstránenie zhodných vzorov zo vstupného textu. Spravidla to robíme tak, že ako náhradu metódy odovzdáme prázdny reťazec.

Pozrime sa, aký výsledok dosiahneme, ak odstránime medzery pomocou znaku nahradiť všetko() metóda s \ s regulárny výraz:

Výsledok reťazca1 = INPUT_STR.replaceAll ("\ s", ""); assertEquals ("TextWithWhitespaces!", výsledok1);

Teraz odovzdáme ďalší regulárny výraz \ s + do nahradiť všetko() metóda:

Výsledok reťazca2 = INPUT_STR.replaceAll ("\ s +", ""); assertEquals ("TextWithWhitespaces!", result2); 

Pretože náhradou je prázdny reťazec, dva nahradiť všetko() volania vedú k rovnakému výsledku, aj keď majú dva regulárne výrazy rôzne významy:

assertEquals (výsledok1; výsledok2);

Ak porovnáme tieto dva nahradiť všetko() hovory, ten s \ s + je efektívnejšie. Je to tak preto, lebo počas hovoru pracuje iba s tromi náhradami \ s urobí jedenásť výmen.

5. Záver

V tomto krátkom článku sme sa dozvedeli o regulárnych výrazoch \ s a \ s +.

Tiež sme videli, ako nahradiť všetko() metóda sa pri týchto dvoch výrazoch chovala odlišne.

Ako vždy, kód je k dispozícii na GitHub.


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