我知道这可能是重复但我没有找到满足这个问题的答案。我有一个像这样设置的大字符串:
季节
内容内容内容内容
赛季
内容内容内容内容
赛季
内容内容内容内容
等
我想获取“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()时,它确实有效,但我需要在两个“季节”字符串之间获取每个字符串。
答案 0 :(得分:1)
最好的办法是使用lookahead断言season
或字符串的结尾。同样,如果换行符序列在您想要使用dotall标记的模式之间,那么点.
也会匹配换行符。
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]
答案 1 :(得分: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;
}