2016-04-26 93 views
0

我有下面的代碼。模式匹配器沒有給出預期的輸出

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++; 
} 

我想打印兩個字符串%%%。 所以我期待下面的輸出:

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

但實際產量爲:

%%%variable1%%% 
variable1 
variable2 
variable2 

爲什麼會這樣呢?這有什麼問題?

+2

如果你刪除'i ++'並使用'group(0)'? – npinti

+0

@npinti:它工作。謝謝。 :) – manutd

+0

如果還有一個變量,就會出現錯誤。 – rock321987

回答

4

您需要刪除i。有沒有必要呢

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

Ideone Demo

你不也需要replaceAll,因爲你需要的是已經在第一個捕獲組

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

Ideone Demo