繁体   English   中英

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

[英]Java Regex find() method not returning proper value

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

如果你看到这个图像,当我执行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() 是“真”(正如 Eclipse 向我展示的那样),但它永远不会进入内部 if 块,如果我尝试分配给另一个布尔值也不会。

https://regex101.com/ 中测试并获得价值。

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

我是 StackOverflow、Java 和 Eclipse 的新手。

查看您的屏幕截图,其中显示m.find()true并且分配给isMatch变量的相同值为false ,这意味着两者都不同步,我能想到的唯一原因是,因为您处于调试模式并且由于您在表达式窗口中拥有它们,因此m.find()似乎被多次执行,其中m.find()的第一次值必须为真,但是当它再次执行时,下次它没有' t 匹配数据并且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_

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM