【发布时间】:2013-07-31 13:15:18
【问题描述】:
在以下代码中:
public static void main(String[] args) {
List<String> allMatches = new ArrayList<String>();
Matcher m = Pattern.compile("\\d+\\D+\\d+").matcher("2abc3abc4abc5");
while (m.find()) {
allMatches.add(m.group());
}
String[] res = allMatches.toArray(new String[0]);
System.out.println(Arrays.toString(res));
}
结果是:
[2abc3, 4abc5]
我希望是
[2abc3, 3abc4, 4abc5]
如何实现?
【问题讨论】:
-
你需要从每个索引开始搜索;使用 find(int startingIndex) 方法并从每个字符位置开始搜索。当然,那么您可能会找到太多匹配项......假设您想从每个数字开始,您可能会尝试在 Matcher.find(String.indexOf(digits, index)) 上为所有匹配索引组合迭代。
-
我想如果是个位数,你可以从比赛开始位置倒退,从那里找到下一场比赛。
-
对于输入
"12abc13abc14abc15",你要[12abc13, 2abc13, 13abc14, 3abc14, 14abc15, 4abc15]还是[12abc13, 13abc14, 14abc15]? -
@johnchen902:后者。解决方案可以解决这个问题。