Quando nel 2017 era uscito Java 9, ero rimasto molto incuriosito da alcune novità che erano state introdotte nella classe java.util.regex.Matcher
, relativa alle “espressioni regolari”. In particolare avevo notato l’aggiunta di diversi nuovi metodi che si possono grosso modo suddividere in 3 gruppi:
-
public Matcher appendReplacement(StringBuilder sb, String replacement)
public StringBuilder appendTail(StringBuilder sb)
-
public String replaceFirst(Function<MatchResult,String> replacer)
public String replaceAll(Function<MatchResult,String> replacer)
-
public Stream<MatchResult> results()
Cosa significano questi nuovi metodi? Se escludiamo solo per un momento appendReplacement
e appendTail
, significano che da Java 9 è possibile (finalmente!) operare sui risultati di “match” delle espressioni regolari in una maniera più “funzionale” sfruttando le functional interface e anche la Stream API (entrambe sono novità di Java 8) tramite il nuovo metodo results
.
Per descrivere in dettaglio i nuovi metodi elencati prima, ho deciso di creare una serie di 3 ulteriori articoli per rendere la trattazione più agevole. I prossimi articoli di questa serie saranno quindi in sequenza:
-
Le novità di Matcher in Java 9: Parte 2
In questa seconda parte descriverò i due nuovi metodiappendReplacement
eappendTail
. -
Le novità di Matcher in Java 9: Parte 3
In questa terza parte descriverò i due nuovi metodireplaceFirst
ereplaceAll
. -
Le novità di Matcher in Java 9: Parte 4
In questa quarta parte descriverò il nuovo metodoresults
.
Prima di concludere ci sono soltanto due note da fare:
Nota 1: il consiglio è di leggere le successive parti in sequenza, in particolare prima la parte 2 e poi la parte 3 perché c’è una sequenzialità tra i due articoli. La parte 4 (sul nuovo metodo results
) invece ha solo una leggera correlazione con la parte 3 per via della interfaccia MatchResult
.
Nota 2: per seguire le altre parti è necessario avere una discreta conoscenza delle “espressioni regolari”. Negli esempi che mostrerò verranno usati pochi costrutti tra cui \d
(una cifra decimale), i quantificatori {n}
e {n,m}
e in particolare anche i “gruppi” e i back-reference. Ma non serve avere una conoscenza davvero “avanzata”. Inoltre serve una conoscenza anche minima delle novità di Java 8, tra cui lambda expression (almeno l’uso basilare), functional interface (almeno java.util.function.Function
) e infine, specificatamente solo per la parte 4, anche la Stream API.