我在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的新手。
看看你的截图,它将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_