Reguliere expressies s en s + in Java

1. Overzicht

Stringvervanging is een standaardbewerking wanneer we strings in Java verwerken.

Dankzij de handige vervang alles() methode in de Draad class, kunnen we gemakkelijk stringvervanging doen met reguliere expressies. Soms kunnen de uitdrukkingen echter verwarrend zijn, bijvoorbeeld \ s en \ s +.

In deze korte tutorial bekijken we het verschil tussen de twee reguliere expressies door middel van voorbeelden.

2. Het verschil tussen \ s en \ s +

De reguliere expressie \ s is een vooraf gedefinieerde tekenklasse. Het geeft één witruimteteken aan. Laten we eens kijken naar de reeks witruimtetekens:

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

Het plusteken + is een hebzuchtige kwantificator, wat een of meerdere keren betekent. Bijvoorbeeld expressie X + komt overeen met een of meer X karakters.

Daarom de reguliere expressie \ s komt overeen met een enkel witruimteteken, while \s + komt overeen met een of meer witruimtetekens.

3. vervang alles() Met een niet-lege vervanging

We hebben de betekenis van reguliere expressies geleerd \ s en \ s +.

Laten we nu eens kijken hoe de vervang alles() methode gedraagt ​​zich anders met deze twee reguliere expressies.

We gebruiken een string als de invoertekst voor alle voorbeelden:

String INPUT_STR = "Tekst met spaties!";

Laten we proberen te passen \ s naar de vervang alles() methode als argument:

String resultaat = INPUT_STR.replaceAll ("\ s", "_"); assertEquals ("Tekst ___ met _____ witruimten! ___", resultaat);

De vervang alles() methode vindt enkele witruimte-tekens en vervangt elke overeenkomst door een onderstrepingsteken. We hebben elf spaties in de invoertekst. Er zullen dus elf vervangingen plaatsvinden.

Laten we vervolgens de reguliere expressie doorgeven \ s + naar de vervang alles() methode:

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

Vanwege de hebzuchtige kwantificator +, de vervang alles() methode zal overeenkomen met de langste reeks opeenvolgende witruimtetekens en elke overeenkomst vervangen door een onderstrepingsteken.

In onze invoertekst hebben we drie reeksen aaneengesloten witruimtetekens. Daarom wordt elk van de drie een onderstrepingsteken.

4. vervang alles() Met een lege vervanging

Een ander veelgebruikt gebruik van de vervang alles() methode is om overeenkomende patronen uit de invoertekst te verwijderen. We doen dit meestal door een lege string door te geven als vervanging van de methode.

Laten we eens kijken welk resultaat we krijgen als we witruimtetekens verwijderen met de vervang alles() methode met de \ s reguliere expressie:

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

Nu zullen we de andere reguliere expressie doorgeven \ s + naar de vervang alles() methode:

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

Omdat de vervanging een lege string is, de twee vervang alles() aanroepen leveren hetzelfde resultaat op, ook al hebben de twee reguliere expressies verschillende betekenissen:

assertEquals (resultaat1, resultaat2);

Als we de twee vergelijken vervang alles() roept, degene met \ s + is efficiënter. Dit komt omdat het het werk doet met slechts drie vervangingen terwijl de oproep met \ s zal elf vervangingen doen.

5. Conclusie

In dit korte artikel hebben we geleerd over de reguliere expressies \ s en \ s +.

We hebben ook gezien hoe de vervang alles() methode gedroeg zich anders met de twee uitdrukkingen.

Zoals altijd is de code beschikbaar op GitHub.