Warum Matcher.group IndexOutOfBoundsException Exception wirft

8

Ich habe unten Code und in dem ich versuche, alle Übereinstimmungen in einem String mit Matcher.group() zu drucken.

%Vor%

Der obige Code wirft Ausnahme im Thread "main" aus java.lang.IndexOutOfBoundsException: Keine Gruppe 2 Ausnahme.

Also meine Frage ist, wie Matcher.group() funktioniert und wie Sie sehen, ich werde 3 passende Zeichenfolge haben, wie kann ich alle von ihnen mit dem group() drucken.

    
Amit Khandelwal 03.06.2017, 09:17
quelle

2 Antworten

7

Es ist klar, dass Sie nur eine Gruppe haben:

%Vor%

stattdessen müssen Sie zum Beispiel eine Schleife verwenden:

%Vor%

Ausgaben

%Vor%

Lesen Sie über Gruppen :

  

Erfassungsgruppe

     

Klammern gruppieren die Regex zwischen ihnen. Sie erfassen den von der Regex übereinstimmenden Text in ihnen zu einer Nummer   Gruppe, die mit einer nummerierten Rückwärtsreferenz wiederverwendet werden kann. Sie erlauben es dir   Regex-Operatoren auf die gesamte gruppierte Regex anwenden.

    
YCF_L 03.06.2017, 09:21
quelle
2

Sie scheinen von den Capture-Gruppen und der Anzahl der Übereinstimmungen in Ihrer Zeichenfolge mit dem angegebenen Muster verwirrt zu sein. In dem von Ihnen verwendeten Muster haben Sie nur eine Erfassungsgruppe :

%Vor%

Eine Fanggruppe wird im Muster mit Klammern markiert.

Wenn Sie jede Übereinstimmung Ihres Musters mit der Eingabezeichenfolge abrufen möchten, sollten Sie eine while loop verwenden:

%Vor%

Jeder Aufruf von Matcher#find() wendet das Muster vom Anfang bis zum Ende auf die Eingabezeichenfolge an und stellt alle Übereinstimmungen zur Verfügung.

    
Tim Biegeleisen 03.06.2017 09:26
quelle

Tags und Links