Java 扫描仪分隔符,Reg。表达问题

Java 扫描仪分隔符,Reg。表达问题,java,regex,Java,Regex,我在使用注册表时遇到了一个小问题。带扫描仪的表达式 代码如下: String name; Pattern p = Pattern.compile("\\s+|\\W+|\\_+"); ArrayList<String> reay = new ArrayList<String>(1000); try { Scanner asdf = new Scanner(new File(s)).useDelimiter(p); w

我在使用注册表时遇到了一个小问题。带扫描仪的表达式

代码如下:

String name;
    Pattern p = Pattern.compile("\\s+|\\W+|\\_+");
    ArrayList<String> reay = new ArrayList<String>(1000);
    try {
        Scanner asdf = new Scanner(new File(s)).useDelimiter(p);
        while (asdf.hasNext()) {
            name = asdf.next();
            reay.add(name);

        }
        asdf.close();
    }

不确定我遗漏了什么以及为什么在数组中会出现空白项

,可能是因为您使用空白或非单词字符或下划线作为分隔符。例如,如果将其中的几个直接混合在一起,会发生什么情况?

您的正则表达式匹配一个或多个空格,然后匹配一个或多个非单词,然后匹配一个或多个下划线

因此,对于“$”的输入,它会说,空间是匹配的!捕获下一个分隔符之前的内容…$这是一场比赛!返回空格和$之间的空字符串。捕获下一个分隔符之前的内容这是一场比赛!返回介于$和\之间的空字符串

我想你的意思是你的分隔符是:

[\\s\\W_]+

仅供参考,
\W
包含空格字符,因此
[\s\W\u]
可以写成
[\W\u]
“[\\W\u]”
,在Java源代码中)。
[\\s\\W_]+