2016-04-26 10 views
0

Ich habe den folgenden Code.Pattern Matcher gibt keine erwartete Ausgabe

String testdata = "%%%variable1%%% is not equal to %%%variable2%%%"; 
Pattern p = Pattern.compile("\\%%%(.*?)\\%%%"); 
Matcher m = p.matcher(testdata); 
String variables = ""; 
int i = 0; 
while (m.find()) { 
    System.out.println(m.group()); 
    variables=m.group().replaceAll("%%%", ""); 
    System.out.println(variables); 
    i++; 
} 

Ich versuche, die Zeichenfolge innerhalb zwei %%% zu drucken. erwarten So unten Ausgang Ich bin:

%%%variable1%%% 
variable1 
%%%variable2%%% 
variable2 

Aber die tatsächliche Ausgabe lautet:

%%%variable1%%% 
variable1 
variable2 
variable2 

Warum ist es so? Was ist das Problem damit?

+2

Was passiert, wenn Sie 'i ++' entfernen und 'group (0)' verwenden? – npinti

+0

@npinti: Es hat funktioniert. Vielen Dank. :) – manutd

+0

Hätte es noch eine Variable gegeben, hätte es einen Fehler gegeben .. – rock321987

Antwort

4

Sie müssen i entfernen. Es besteht keine Notwendigkeit davon

while (m.find()) { 
     System.out.println(m.group()); 
     String variables=m.group().replaceAll("%%%", ""); 
     System.out.println(variables); 
} 

Ideone Demo

Sie auch replaceAll nicht brauchen, weil, was Sie benötigen ist bereits in der ersten Erfassungsgruppe

while (m.find()) { 
    System.out.println(m.group()); 
    System.out.println(m.group(1)); 
} 

Ideone Demo

Verwandte Themen