我正在尝试理解 Java 中的模式匹配。然而,我对下面代码的输出感到困惑。它在将“aa”与“aaaa”匹配时打印计数为 2,但我希望它打印 3,因为“a”后跟“a”在给定字符串中出现三次。有人能解释一下这里有什么问题吗?
Pattern p = Pattern.compile("aa");
Matcher m = p.matcher("aaaa");
int count = 0;
while(m.find())
count++;
System.out.println(count);
最佳答案
匹配器不会找到重叠的匹配项。因此,由于第一个匹配项是在索引 0 处找到的,长度为 2,因此直到索引 2 时才会开始查找下一个匹配项,并且不会找到从索引 1 开始的潜在匹配项。
如果您想查找重叠的匹配项,您可以使用m.find(start)
,其中start
是比上一个匹配项高1的索引。例如:
Pattern p = Pattern.compile("aa");
Matcher m = p.matcher("aaaa");
int count = 0;
int start = 0;
while(m.find(start)) {
count++;
start = m.start() + 1;
}
System.out.println(count);
关于java - 在 java 中将 "aa"与 "aaaa"匹配会返回 2——我希望它是 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22726243/