Java Regex find()方法未返回正确的值
我在Java中创建了一个正则表达式模式,显然matcher类在字符串中找到了它,但它没有返回正确的值 如果您看到了这一点,当我执行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
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_