Regulære udtryk s og s + i Java

1. Oversigt

Strengsubstitution er en standardhandling, når vi behandler strenge i Java.

Tak til det praktiske erstatteAlle () metode i Snor klasse, kan vi nemt udføre strengsubstitution med regulære udtryk. Imidlertid kan udtrykkene undertiden være forvirrende, for eksempel \ s og \ s +.

I denne korte vejledning skal vi se på forskellen mellem de to regulære udtryk gennem eksempler.

2. Forskellen mellem \ s og \ s +

Det regulære udtryk \ s er en foruddefineret karakterklasse. Det angiver en enkelt blanktegn. Lad os gennemgå sættet med mellemrumstegn:

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

Plustegnet + er en grådig kvantificering, hvilket betyder en eller flere gange. For eksempel udtryk X + matcher en eller flere x tegn.

Derfor, det regulære udtryk \ s matcher et enkelt hvidt mellemrumstegn, mens \s + vil matche et eller flere tegn i mellemrummet.

3. erstatteAlle () Med en ikke-udskiftning

Vi har lært betydningen af ​​regulære udtryk \ s og \ s +.

Lad os nu se på, hvordan erstatteAlle () metode opfører sig forskelligt med disse to regulære udtryk.

Vi bruger en streng som inputtekst til alle eksempler:

String INPUT_STR = "Tekst med mellemrum!";

Lad os prøve at passere \ s til erstatteAlle () metode som argument:

Strengresultat = INPUT_STR.replaceAll ("\ s", "_"); assertEquals ("Tekst ___ med _____ hvide mellemrum! ___", resultat);

Det erstatteAlle () metode finder enkelt tegn i det hvide mellemrum og erstatter hver kamp med en understregning. Vi har elleve tegn med mellemrum i inputteksten. Således vil elleve udskiftninger forekomme.

Lad os derefter passere det regulære udtryk \ s + til erstatteAlle () metode:

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

På grund af den grådige kvantificering +, det erstatteAlle () metoden vil matche den længste rækkefølge af sammenhængende blanktegn og erstatte hver kamp med en understregning.

I vores inputtekst har vi tre sekvenser af sammenhængende blanktegn. Derfor vil hver af de tre blive en understregning.

4. erstatteAlle () Med en tom udskiftning

En anden almindelig anvendelse af erstatteAlle () metoden er at fjerne matchede mønstre fra inputteksten. Vi gør det normalt ved at sende en tom streng som erstatning til metoden.

Lad os se, hvilket resultat vi får, hvis vi fjerner mellemrumstegn ved hjælp af erstatteAlle () metode med \ s almindelig udtryk:

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

Nu passerer vi det andet regulære udtryk \ s + til erstatteAlle () metode:

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

Fordi erstatningen er en tom streng, er de to erstatteAlle () opkald producerer det samme resultat, selvom de to regulære udtryk har forskellige betydninger:

assertEquals (resultat1, resultat2);

Hvis vi sammenligner de to erstatteAlle () opkald, den med \ s + er mere effektiv. Dette skyldes, at det kun gør jobbet med tre udskiftninger, mens opkaldet med \ s vil udføre elleve udskiftninger.

5. Konklusion

I denne korte artikel lærte vi om de regulære udtryk \ s og \ s +.

Vi så også, hvordan erstatteAlle () metode opførte sig forskelligt med de to udtryk.

Som altid er koden tilgængelig på GitHub.