我已经用Java创建了一个正则表达式模式,显然,匹配器类将其找到到字符串中,但是它没有返回正确的值。
如果看到此image,则当我执行m.find()
方法时,Eclipse给我一个'true'值,但它没有正确地将其分配给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的新手。
答案 0 :(得分: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_