Kann mir jemand die Ausgabe des folgenden Codes erklären?
Code: Alles auswählen
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PatternTest {
public static void main(String[] args) {
String[] text = {"[proggen.org][0] Xin", "[proggen.org][1] dani93"};
Pattern pattern = Pattern.compile("\\[proggen.org\\]\\[(\\d)\\].+");
Matcher matcher = pattern.matcher(text[0]);
System.out.println(matcher.matches());
System.out.println(matcher.groupCount());
System.out.println(matcher.group(1));
System.out.println(Pattern.compile("\\[proggen.org\\]\\[(\\d)\\].+").matcher(text[0]).matches());
System.out.println(Pattern.compile("\\[proggen.org\\]\\[(\\d)\\].+").matcher(text[0]).groupCount());
System.out.println(Pattern.compile("\\[proggen.org\\]\\[(\\d)\\].+").matcher(text[0]).group(1));
}
}
Ich versuche einfach die Ziffer in den zweiten eckigen Klammern zu parsen. Doch warum funktioniert der erste Teil, aber der zweite nicht?! Die machen doch genau das gleiche, oder überseh ich was?true
1
0
true
1
Exception in thread "main" java.lang.IllegalStateException: No match found
at java.util.regex.Matcher.group(Matcher.java:485)
at PatternTest.main(PatternTest.java:15)
EDIT:
Bäh... Erst wenn die Methode matches() ausgeführt wird, landen die Ergebnisse im Objekt. Deswegen geht die zweite Schreibweise nicht.