我在使用reg时遇到了一个小问题。扫描仪表达

这是代码:

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();
    }


和结果数组(在文本文件中使用很多非单词字符):

[arst, , tdnxc, , rst, , arst, , arst, wfp, arst, , arst]


不确定我缺少什么以及为什么我在数组中获得空白条目

最佳答案

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

因此,对于输入“ $ _”,它将说,空格是匹配项!捕获下一个定界符之前的内容... $是一个匹配项!返回空格和$之间的空字符串。捕获下一个定界符之前的内容。_是一个匹配项!返回$和_之间的空字符串。

我认为您的分隔符是:

[\\s\\W_]+

10-04 10:14