Vanlige uttrykk s og s + i Java

1. Oversikt

Strengerstatning er en standardoperasjon når vi behandler strenger i Java.

Takk til det praktiske erstatt alle () metoden i String klasse, kan vi enkelt gjøre strengerstatning med regulære uttrykk. Noen ganger kan imidlertid uttrykkene være forvirrende, for eksempel \ s og \ s +.

I denne korte opplæringen vil vi se på forskjellen mellom de to vanlige uttrykkene gjennom eksempler.

2. Forskjellen mellom \ s og \ s +

Det vanlige uttrykket \ s er en forhåndsdefinert karakterklasse. Det indikerer et enkelt hvitt mellomrom. La oss se gjennom settet med mellomromstegn:

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

Plusstegnet + er en grådig kvantifier, som betyr en eller flere ganger. For eksempel uttrykk X + samsvarer med en eller flere X tegn.

Derfor, det vanlige uttrykket \ s samsvarer med et enkelt hvitt mellomrom, mens \s + vil samsvare med ett eller flere mellomromstegn.

3. erstatt alle () Med en ikke-tom erstatning

Vi har lært betydningen av vanlige uttrykk \ s og \ s +.

La oss nå se på hvordan erstatt alle () metoden oppfører seg annerledes med disse to regulære uttrykkene.

Vi bruker en streng som inngangstekst for alle eksemplene:

String INPUT_STR = "Tekst med mellomrom!";

La oss prøve å passere \ s til erstatt alle () metode som argument:

Strengresultat = INPUT_STR.replaceAll ("\ s", "_"); assertEquals ("Tekst ___ Med _____ Mellomrom! ___", resultat);

De erstatt alle () metoden finner enkle mellomromstegn og erstatter hver kamp med en understreking. Vi har elleve mellomromstegn i inngangsteksten. Dermed vil elleve erstatninger skje.

La oss deretter passere det vanlige uttrykket \ s + til erstatt alle () metode:

Strengresultat = INPUT_STR.replaceAll ("\ s +", "_"); assertEquals ("Text_With_Whitespaces! _", result);

På grunn av den grådige kvantifisereren +, den erstatt alle () metoden vil matche den lengste sekvensen av sammenhengende mellomromstegn og erstatte hver kamp med et understrek.

I vår inngangstekst har vi tre sekvenser av sammenhengende mellomromstegn. Derfor vil hver av de tre bli et understrek.

4. erstatt alle () Med en tom erstatning

En annen vanlig bruk av erstatt alle () metoden er å fjerne samsvarende mønstre fra inngangsteksten. Vi gjør det vanligvis ved å sende en tom streng som erstatning for metoden.

La oss se hvilket resultat vi får hvis vi fjerner tegn mellomrom med erstatt alle () metoden med \ s vanlig uttrykk:

Strengresultat1 = INPUT_STR.replaceAll ("\ s", ""); assertEquals ("TextWithWhitespaces!", result1);

Nå vil vi passere det andre regulære uttrykket \ s + til erstatt alle () metode:

Strengresultat2 = INPUT_STR.replaceAll ("\ s +", ""); assertEquals ("TextWithWhitespaces!", result2); 

Fordi erstatningen er en tom streng, de to erstatt alle () samtaler gir det samme resultatet, selv om de to regulære uttrykkene har forskjellige betydninger:

assertEquals (resultat1, resultat2);

Hvis vi sammenligner de to erstatt alle () samtaler, den med \ s + er mer effektiv. Dette er fordi den gjør jobben med bare tre erstatninger mens samtalen med \ s vil gjøre elleve erstatninger.

5. Konklusjon

I denne korte artikkelen lærte vi om regulære uttrykk \ s og \ s +.

Vi så også hvordan erstatt alle () metoden oppførte seg annerledes med de to uttrykkene.

Som alltid er koden tilgjengelig på GitHub.


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