regEx find() nach matches()

22/06/2014 - 22:01 von bernward | Report spam
Hallo
warum wird beim folgenden Code das erste "a" nicht gefunden.

String aString = "abcabd.";
Pattern pattern = Pattern.compile("[a]*");
Matcher matcher = pattern.matcher(aString);
if (matcher.matches()) {
//
} else {
System.out.println("matcher.matches() == false");
while (matcher.find()) {
System.out.print(matcher.start() + " / " + matcher.end());
System.out.println("matcher.group(): " + matcher.group());
}
}

Ich erhalte das Ergebnis
1 / 1 matcher.group():
2 / 2 matcher.group():
3 / 4 matcher.group(): a
4 / 4 matcher.group():
5 / 5 matcher.group():
6 / 6 matcher.group():
7 / 7 matcher.group():

Erwartet hàtte ich aber als erste Zeile noch die Zeile
0 / 1 matcher.group(): a

Wenn ich den regulàren Ausdruck [a] wàhle, wird das erste a gefunden. Es kommt das erwartete Ergebnis
0 / 1 matcher.group(): a
3 / 4 matcher.group(): a

Bernward
 

Lesen sie die antworten

#1 Patrick Roemer
22/06/2014 - 23:37 | Warnen spam
Responding to bernward:

warum wird beim folgenden Code das erste "a" nicht gefunden.

String aString = "abcabd.";
Pattern pattern = Pattern.compile("[a]*");
Matcher matcher = pattern.matcher(aString);
if (matcher.matches()) {
//
} else {
System.out.println("matcher.matches() == false");
while (matcher.find()) {
System.out.print(matcher.start() + " / " + matcher.end());
System.out.println("matcher.group(): " + matcher.group());
}
}



Das #matches() findet das erste Vorkommen und aktualisiert den "last
successful match state" entsprechend, liefert dann aber false zurueck,
weil nicht der ganze String matcht. #find() faengt dann erst hinter dem
"last successful match" an. Das "if a previous invocation of the method
was successful" in der #find()-Doku ist also irrefuehrend, das bezieht
sich auf alle drei match-Methoden.

Viele Gruesse,
Patrick

Ähnliche fragen