我试图从一个冗长的字符串中获取一个字符串数组。数组由两个其他字符串(在我的例子中为???
和???
)之间匹配的字符串组成。我尝试了以下代码,并没有给我预期的结果
Pattern pattern = Pattern.compile("\\?\\?\\?(.*?)\\?\\?\\?");
String[] arrayOfKeys = pattern.split("???label.missing???sdfjkhsjkdf sjkdghfjksdg ???some.label???sdjkhsdj");
for (String key : arrayOfKeys) {
System.out.println(key);
}
我的预期结果是:
["label.missing", "some.label"]
答案 0 :(得分:3)
使用Pattern.matcher()
获取输入字符串的Matcher
,然后使用Matcher.find()
查找所需的模式。 Matcher.find()
会找到与提供的Pattern
匹配的子字符串。
Pattern pattern = Pattern.compile("\\?{3}(.*?)\\?{3}");
Matcher m = pattern.matcher(inputString);
while (m.find()) {
System.out.println(m.group(1));
}
Pattern.split()
将使用您的模式作为分隔符来分割字符串(然后丢弃分隔符部分),这显然不是您想要的情况。您的正则表达式旨在匹配您要提取的文本。
我缩短模式以使用量词重复3次 {3}
,而不是写\?
3次。
答案 1 :(得分:0)
我会用你要分割的东西创建一个字符串输入,并在其上调用input.split()。
String input = "???label.missing???sdfjkhsjkdf sjkdghfjksdg ???some.label???sdjkhsdj";
String[] split = input.split("\\?\\?\\?");
在这里试试: http://ideone.com/VAmCyu
答案 2 :(得分:0)
Pattern pattern = Pattern.compile("\\?{3}(.+?)\\?{3}");
Matcher matcher= pattern.matcher("???label.missing???sdfjkhsjkdf sjkdghfjksdg ???some.label???sdjkhsdj");
List<String> aList = new ArrayList<String>();
while(matcher.find()) {
aList.add(matcher.group(1));
}
for (String key : aList) {
System.out.println(key);
}