2013-03-04 48 views
0

我想獲得所有可能的匹配到arraylist Returnvalue,但是當在regexMatcher上調用組時,它只返回最後的結果。如何設置arraylist =每個匹配的正則表達式

我該如何完成將所有匹配轉換爲字符串或數組或任何其他類型的變量?

while (regexMatcher.find()){ 
if (regexMatcher.group().length() != 0){ 
    returnvalue.add(regexMatcher.group()); 
    Writer.println(returnvalue.add); 
} 
+0

你的意思是使用'java.util.regex.matcher'? – 2013-03-04 02:40:42

+0

是的,除非有另一種方式,我是新來的 – 2013-03-04 02:41:57

+0

不會導致無限循環(While(regexMatcher.group().length()!= 0)? – 2013-03-04 02:51:30

回答

2

從我的理解,假設你有字符串"John writes about this, and John writes about that"和模式"(John)([^,]*)",你想返回字符串中的模式的每場比賽爲ArrayList的return Value的元素。

在這種情況下,會有2個這樣的匹配,"John writes about this""John writes about that"。如果是這樣,下面的短程序將給出完全的結果。嘗試更改代碼以滿足您的需求。

import java.util.*; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

class testCode 
{ 
    public static void main(String args[]) 
    { 
     String text = "John writes about this, and John writes about that"; 
     String patternString1 = "(John)([^,]*)"; 

     Pattern pattern = Pattern.compile(patternString1); 
     Matcher regexMatcher = pattern.matcher(text); 

     List<String> returnValue= new ArrayList<String>(); 

     while(regexMatcher.find()) 
      if(regexMatcher.group().length() != 0) 
       returnValue.add(regexMatcher.group()); 

     for(int i=0; i<returnValue.size(); i++) 
      System.out.println(returnValue.get(i)); 
    } 
} 

輸出:

John writes about this 
John writes about that