Ce face Matcher.start
După un find() sau matches() reușit, start() returnează indicele primului caracter găsit, iar end() indicele de după ultimul caracter. Astfel text.substring(m.start(), m.end()) este exact m.group(), iar end() - start() este lungimea potrivirii.
Variantele cu un număr de grup dau pozițiile acelui grup. Pozițiile sunt utile pentru evidențieri (de exemplu, încadrarea cuvântului găsit în paranteze) sau pentru a afișa unde a apărut o eroare.
Parametri
| Parametru | Descriere |
|---|---|
grup |
Opțional: numărul grupului. |
Ce returnează
Un indice int în text.
Exemple
Exemplul 1: Unde apare cuvântul căutat
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String text = "Java e simplu. Învăț Java la Iași.";
Matcher m = Pattern.compile("Java").matcher(text);
while (m.find()) {
System.out.println("De la " + m.start() + " până la " + m.end() + ": " + text.substring(m.start(), m.end()));
}
}
}
Rezultat
De la 0 până la 4: Java
De la 21 până la 25: Java
Exemplul 2: Evidențierea numerelor dintr-un text
Construim textul nou bucată cu bucată: partea dinaintea potrivirii, apoi potrivirea între paranteze drepte.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String text = "Am 3 mere, 12 pere și 7 prune.";
Matcher m = Pattern.compile("\\d+").matcher(text);
StringBuilder sb = new StringBuilder();
int ultim = 0;
while (m.find()) {
sb.append(text, ultim, m.start()).append('[').append(m.group()).append(']');
ultim = m.end();
}
sb.append(text.substring(ultim));
System.out.println(sb);
}
}
Rezultat
Am [3] mere, [12] pere și [7] prune.
Greșeli frecvente
- Crezi că
end()este poziția ultimului caracter. Este poziția de după el, ca al doilea argument al luisubstring. - Apelezi
start()după unfind()care a datfalse:IllegalStateException.
Comenzi înrudite
Matcher.find: find caută următoarea potrivire în text; group returnează textul găsit sau doar partea dintr-un grup (paranteze).Matcher: Obiectul care aplică un Pattern pe un text; matches verifică dacă tot textul se potrivește cu modelul.String.substring: Returnează o bucată din șir: de la beginIndex (inclusiv) până la endIndex (exclusiv) sau până la final.Matcher.replaceAll: Înlocuiește toate potrivirile din text; în înlocuire $1 reprezintă grupul 1, iar varianta cu funcție calculează textul nou.