Exception bei Regex-Matching

Objektorientierte Programmiersprache auf Basis einer virtuellen Maschine (https://www.oracle.com/java/)
Antworten
nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Exception bei Regex-Matching

Beitrag von nufan » Mo Feb 11, 2013 2:09 am

Eine Frage aus der Kategorie "WTF" ^^
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));
    }

}
Ausgabe:
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)
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?

EDIT:
Bäh... Erst wenn die Methode matches() ausgeführt wird, landen die Ergebnisse im Objekt. Deswegen geht die zweite Schreibweise nicht.

wurfkeks
Beiträge: 1
Registriert: So Mär 24, 2013 5:52 pm

Re: Exception bei Regex-Matching

Beitrag von wurfkeks » So Mär 24, 2013 5:58 pm

Die Lösung ist ganz einfach: Bei der zweiten Variante erzeugst du mit jedem println()-Aufruf alle Objekte neu. In der Doku steht zu der group(int)-Methode:
Returns the input subsequence captured by the given group during the previous match operation.
Da aber wie gesagt das Objekt völlig neu erzeugt wird, hat auf diesem vorher kein Aufruf der "match operation" stattgefunden. Somit ist die Exception erklärt, welche ja besagt, dass es keinen Match gibt.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Exception bei Regex-Matching

Beitrag von nufan » So Mär 24, 2013 6:04 pm

Danke, aber wie du am Ende meines ersten Beitrags sehen kannst bin ich da schon selbst drauf gekommen ^^

Simon
Beiträge: 2
Registriert: Mi Mär 27, 2013 4:23 pm

Re: Exception bei Regex-Matching

Beitrag von Simon » Do Mär 28, 2013 6:05 pm

Interessant wären noch die Zeilennummern des Beispiels, damit man erkennen kann, wo die Exception nun genau geflogen ist :mrgreen:
Hallo zusammen

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Exception bei Regex-Matching

Beitrag von nufan » Do Mär 28, 2013 6:11 pm

Simon hat geschrieben:Interessant wären noch die Zeilennummern des Beispiels, damit man erkennen kann, wo die Exception nun genau geflogen ist :mrgreen:
Ist (wie man an der Ausgabe erkennen kann) die letzte Zeile in main :)

Antworten