Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Regex find()方法未返回正确的值_Java_Regex_Matcher - Fatal编程技术网

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

Java Regex find()方法未返回正确的值,java,regex,matcher,Java,Regex,Matcher,我在Java中创建了一个正则表达式模式,显然matcher类在字符串中找到了它,但它没有返回正确的值 如果您看到了这一点,当我执行m.find()方法时,Eclipse给了我一个“true”值,但它没有正确地将其分配给isMatch变量 当我写“时也会发生同样的情况,如果(m.find()),它不会进入内部块 代码示例: { } file.getName()值的示例: “1.0-20190409095211_200522007_CNA_2018000959_1_xxxxx.pdf” 显然,m.f

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

如果您看到了这一点,当我执行
m.find()
方法时,Eclipse给了我一个“true”值,但它没有正确地将其分配给
isMatch
变量

当我写“
时也会发生同样的情况,如果(m.find())
,它不会进入内部块

代码示例:

{

}

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

显然,m.find()是“true”(正如Eclipse向我展示的那样),但它从不进入内部if块,如果我尝试分配给另一个布尔值也不会

在中进行了测试,获得了价值

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


我是StackOverflow、Java和Eclipse的新手。

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

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

另外,除非
m.find()
m.matches()
返回的值为
true,否则不要访问
.group()
方法

对我来说,您的代码工作正常,可以打印
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_

请删除Eclipse屏幕捕获链接,而是直接在问题中包含所有相关Java代码。如果使用
if(m.find()){…}
而不调用
.find(),请在问题中添加代码,而不是图像
在此之前,如果您的正则表达式与字符串匹配,它必须工作。您会在图像中看到更好的效果,但我将代码放入同步方法中,它会发生吗?同步方法在这里并不重要,因为您处理的所有变量都是方法中的局部变量。此外,重新求值不需要再次调用整个方法其他线程,因此在保持方法同步的同时,您可以根据需要多次重新计算表达式。Thnaks先生。问题似乎如您所述:“这意味着两者都不同步,我能想到的唯一原因是,由于您处于调试模式,并且在表达式窗口中有它们,所以m.find()似乎多次被执行死刑,“……我对什么不起作用感到恼火。是的,我知道这种情况有时会发生,而且有点令人沮丧:)很高兴我能够澄清这一点。
isMatch: true
20190409095211_200522007_CNA_20180000959_