Java 为什么';我的正则表达式不能找到我模式的所有实例

Java 为什么';我的正则表达式不能找到我模式的所有实例,java,regex,Java,Regex,我试图找到这个字符串中出现的每一个“-”,所以我希望输出为2,而不是1 如果我搜索这个字符串“-.-.-.-.-.-.-”,我期望2,我得到2。因此,在我看来,当它们彼此相邻分组时,搜索无法识别单个“-”。我该如何解决这个问题 import java.util.regex.Matcher; import java.util.regex.Pattern; public class test { public static void find() { int count =

我试图找到这个字符串中出现的每一个“-”,所以我希望输出为2,而不是1

如果我搜索这个字符串“-.-.-.-.-.-.-”,我期望2,我得到2。因此,在我看来,当它们彼此相邻分组时,搜索无法识别单个“-”。我该如何解决这个问题

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class test {
    public static void find() {
        int count = 0;
        Pattern p = Pattern.compile("\\.-\\.");
        Matcher m = p.matcher("-.-.-.-");
        while (m.find()) {
            count++;    
        }
        System.out.println(count);
    }

    public static void main(String[] args) {
        find();
    }

}

上述逻辑的解决方法如下:

String p = ".-.";
String s = "-.-.-.-";
int count = 0;
for (int index = s.indexOf(pa);
    index >= 0;
    index = s.indexOf(pa, index + 1)){
         count++;
}

修正了Nick和bobble bubble提出的前瞻性

Pattern p = Pattern.compile("\\.-(?=\\.)");

试试看,它们不是紧挨着分组的,而是在第一个字符串中重叠。您可以通过使用前瞻来解决此问题:
\.-(?=\)