2014-08-31 70 views
0

我知道這可能是重複的,但我還沒有找到滿足此問題的答案。我有一個是建立像這樣一個大的字符串:多次查找兩個字符串之間的所有字符串

賽季
內容內容內容內容內容
賽季
內容內容內容內容內容
賽季
內容內容內容內容內容

等。

我想獲取「season」字符串之間的所有內容並將該內容放入List中。這是到目前爲止我的代碼,但它不工作,它不匹配任何東西......

String pattern = "season"; 
    Pattern pattern2 = Pattern.compile(pattern+"(.*?)"+pattern); 
    Matcher m = pattern2.matcher(str); 
    while(m.find()) { 
     System.out.println(m.group()); 

當我使用StringUtils.substringBetween()它的工作,但我需要讓每一個字符串之間的兩個「季節「串。

+1

那些是新的生產線? – 2014-08-31 23:46:04

回答

1

最好的辦法是使用lookahead來斷言season或字符串的結尾如下。同樣,如果換行符位於要使用dotall標誌的模式之間,也使dot與換行符匹配。

String s = "season\nfoobar foobaz\n\nseason\nbarbaz\nseason\nbazquz"; 
Pattern p = Pattern.compile("(?s)season\\s*(.*?)(?=\\s*season|$)"); 
Matcher m = p.matcher(s); 
List<String> arrayList = new ArrayList<String>(); 
while (m.find()) { 
    arrayList.add(m.group(1)); 
} 
System.out.println(arrayList); // [foobar foobaz, barbaz, bazquz] 
0

這應該工作太 -

import java.util.ArrayList; 
import java.util.List; 

public class Season { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     String largeString = "season content content content content content season content content content content content season content content content content content"; 
     List<ArrayList<String>> lists = getStringBetweenSeason(largeString); 
     for (ArrayList<String> list : lists) { 
      for (String str : list) 
       System.out.println(list); 
     } 

    } 

    public static List<ArrayList<String>> getStringBetweenSeason(
      String largeString) { 
     if (largeString == null) 
      return null; 
     List<ArrayList<String>> lists = new ArrayList<ArrayList<String>>(); 
     for (String str : largeString.split("season")) { 
      if (!str.trim().isEmpty()) { 
       ArrayList<String> list = new ArrayList<String>(); 
       for (String strContent : str.split(" ")) { 
        list.add(strContent); 
       } 
       lists.add(list); 
      } 
     } 
     return lists; 
    } 
} 

-----如果模式匹配的目標 - 那麼這似乎太工作..

public static ArrayList<String> getStringBetweenSeason(String largeString) { 
     if (largeString == null) 
      return null; 
     ArrayList<String> lists = new ArrayList<String>(); 
     Pattern p = Pattern.compile("season" + "*.*" + "season"); 
     Matcher m = p.matcher(largeString); 

     while (m.find()) { 
      lists.add(m.group()); 
     } 

     return lists; 
    } 
+0

'season *。* season'匹配'seaso一些文字注意不完整的第一個wordseason' ... – AlexR 2014-09-01 00:32:38

相關問題