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

相关问题