Java Regex find()方法没有返回正确的值

问题描述 投票:-1回答:1

我在Java中创建了一个正则表达式模式,显然,匹配器类在字符串中找到它,但它没有返回正确的值。

如果你看到这个image,那么当我执行m.find()方法时,Eclipse会给我一个“真正的”值,但是它没有正确地将它分配给isMatch变量。

当我写“if (m.find())时,它也没有进入内部块。

代码示例:

{

    private final static String REGEX_PATTERN_FILE_GROUP = "(\\d{14}_\\d{9}_\\D{3}_\\d{11}_)";

    for (File file: fileList) {
        Pattern p = Pattern.compile(REGEX_PATTERN_FILE_GROUP);  
        Matcher m = p.matcher(file.getName());              
        if (m.find())
        {   
           .... More code ...
        }

}

file.getName()值的示例:“1.0- 20190409095211_200522007_CNA_20180000959_1_xxxxx.pdf”

显然,m.find()是'true'(就像Eclipse向我展示的那样),但它永远不会进入内部if块,如果我尝试分配给另一个布尔值。

https://regex101.com/测试,它获得了价值。

我的Java版本是“1.8.0_181”64位服务器。

我是StackOverflow,Java和Eclipse的新手。

java regex matcher
1个回答
0
投票

看看你的截图,它将m.find()显示为true,并将isMatch变量分配给false的相同值,意味着两者不同步,我能想到的唯一原因是,因为你处于调试模式,因为你有他们在表达式窗口中,m.find()似乎被多次执行,其中m.find()的第一次值必须是真的,但是当它再次执行时,下次它与数据不匹配并且m.find()'s值变为false并且最终被分配到isMatch变量。

尝试摆脱调试模式,只需运行代码,变量isMatch的值应该是同步的,应该是预期的。或者您甚至可以在调试代码时关闭表达式窗口,并且调试应该按预期为您提供正确的值。确保你没有重新评估m.find()否则你的程序将给你意想不到的结果。

此外,永远不要访问.group()方法,除非m.find()m.matches()返回的值是true

对我来说,你的代码工作正常,并打印true

String REGEX_PATTERN_FILE_GROUP = "(\\d{14}_\\d{9}_\\D{3}_\\d{11}_)";

String s = "1.0- 20190409095211_200522007_CNA_20180000959_1_xxxxx.pdf";
Pattern p = Pattern.compile(REGEX_PATTERN_FILE_GROUP);
Matcher m = p.matcher(s);
boolean isMatch = m.find();
System.out.println("isMatch: " + isMatch);
if (isMatch) {
    System.out.println(m.group());
}

打印,

isMatch: true
20190409095211_200522007_CNA_20180000959_
© www.soinside.com 2019 - 2024. All rights reserved.