如何使用 String.split()
从输入中提取重叠匹配项?
例如,如果尝试查找与“aba”
匹配的内容:
String input = "abababa";
String[] parts = input.split(???);
预期输出:
[aba, aba, aba]
最佳答案
String#split
不会给你重叠的匹配。因为字符串的特定部分只会包含在获得的数组的唯一索引中,而不会包含在两个索引中。
您应该在此处使用 Pattern
和 Matcher
类。
您可以使用此正则表达式:-
Pattern pattern = Pattern.compile("(?=(aba))");
并使用Matcher#find
方法获取所有重叠的匹配项,并为其打印group(1)
。
上面的正则表达式匹配每个空字符串,后跟aba
,然后只打印第一个捕获的组。现在,由于look-ahead
是零宽度断言,因此它不会消耗匹配的字符串。因此您将获得所有重叠的匹配项。
String input = "abababa";
String patternToFind = "aba";
Pattern pattern = Pattern.compile("(?=" + patternToFind + ")");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(patternToFind + " found at index: " + matcher.start());
}
输出:-
aba found at index: 0
aba found at index: 2
aba found at index: 4
关于java - 使用 split 提取重叠匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41469476/