Reguláris kifejezések s és s + Java-ban

1. Áttekintés

A karakterlánc-helyettesítés szokásos művelet, amikor a karakterláncokat Java-ban dolgozzuk fel.

Hála a praktikusnak csereAll () módszer a Húr osztályban könnyen elvégezhetjük a húrpótlást reguláris kifejezésekkel. Azonban néha a kifejezések zavaróak lehetnek, például \ s és \ s +.

Ebben a rövid bemutatóban példákon keresztül megvizsgáljuk a két reguláris kifejezés különbségét.

2. A különbség \ s és \ s +

A reguláris kifejezés \ s egy előre definiált karakterosztály. Egyetlen szóköz karaktert jelöl. Nézzük át a szóköz karakterek halmazát:

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

A pluszjel + egy kapzsi kvantor, ami egy vagy több alkalommal jelent. Például kifejezés X + egy vagy több x karakterek.

Ebből kifolyólag, a szabályos kifejezés \ s egyetlen szóköz karakterrel egyezik, míg \Az s + egy vagy több szóköz karakterrel fog egyezni.

3. csereAll () Nem üres pótlással

Megtanultuk a reguláris kifejezések jelentését \ s és \ s +.

Most nézzük meg, hogyan csereAll () módszer másképp viselkedik ezzel a két reguláris kifejezéssel.

Karakterláncot használunk beviteli szövegként az összes példa esetében:

String INPUT_STR = "Szöveg szóközökkel!";

Próbáljuk meg a továbbjutást \ s hoz csereAll () módszer mint argumentum:

Karakterlánc eredménye = INPUT_STR.replaceAll ("\ s", "_"); assertEquals ("Szöveg ___ _____ szóközökkel! ___", eredmény);

A csereAll () A módszer egyetlen szóköz karaktert talál, és minden mérkőzést aláhúzással helyettesít. Tizenegy szóköz van a beviteli szövegben. Így tizenegy pótlás fog bekövetkezni.

Ezután adjuk át a reguláris kifejezést \ s + hoz csereAll () módszer:

Karakterlánc eredménye = INPUT_STR.replaceAll ("\ s +", "_"); assertEquals ("Text_With_Whitespaces! _", eredmény);

A kapzsi kvantor miatt +, a csereAll () A metódus illeszkedik a szomszédos szóköz karakterek leghosszabb sorozatához, és minden mérkőzést aláhúzással cserél.

Beviteli szövegünkben három összefüggő szóköz karakter található. Ezért mindhárman aláhúzássá válnak.

4. csereAll () Üres cserével

A. Másik gyakori használata csereAll () A módszer az egyező minták eltávolítása a beviteli szövegből. Általában úgy csináljuk, hogy egy üres karakterláncot adunk át a módszer helyettesítésére.

Lássuk, milyen eredményt érünk el, ha a szóköz használatával eltávolítjuk a szóköz karaktereket csereAll () módszer a \ s reguláris kifejezés:

Karakterlánc eredménye1 = INPUT_STR.replaceAll ("\ s", ""); assertEquals ("TextWithWhitespaces!", eredmény1);

Most átadjuk a másik reguláris kifejezést \ s + hoz csereAll () módszer:

Karakterlánc eredménye2 = INPUT_STR.replaceAll ("\ s +", ""); assertEquals ("TextWithWhitespaces!", 2. eredmény); 

Mivel a helyettesítés üres karakterlánc, a kettő csereAll () a hívások ugyanazt az eredményt hozzák, annak ellenére, hogy a két reguláris kifejezésnek jelentése eltérő:

assertEquals (eredmény1, eredmény2);

Ha összehasonlítjuk a kettőt csereAll () hívások, az, akivel \ s + hatékonyabb. Ez azért van, mert csak három pótlással végzi a munkát, miközben a hívás vele \ s tizenegy cserét hajt végre.

5. Következtetés

Ebben a rövid cikkben megismerhettük a reguláris kifejezéseket \ s és \ s +.

Azt is láttuk, hogy a csereAll () módszer másképp viselkedett a két kifejezéssel.

Mint mindig, a kód elérhető a GitHubon.