Java 正则表达式 find() 方法没有返回正确的值
Java Regex find() method not returning proper value
我在 Java 中创建了一个正则表达式模式,显然,匹配器 class 在字符串中找到了它,但它没有返回正确的值。
如果您看到这个 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 位服务器。
我是 Whosebug、Java 和 Eclipse 的新手。
查看您的屏幕截图,其中显示 m.find()
为 true
并且分配给 isMatch
变量的相同值是 false
,这意味着两者不同步,我能想到的唯一原因是,因为你处于调试模式并且因为你在表达式 window 中有它们,m.find()
似乎被执行了多次,其中 [ 的第一个时间值=12=] 一定是真的,但是当它再次执行时,下次它与数据不匹配并且 m.find()'s
值变成 false
并且最终被分配给 isMatch
变量.
尝试摆脱调试模式,只是 运行 代码和变量 isMatch
的值应该同步并且应该符合预期。或者您甚至可以在调试代码时关闭表达式 window,并且调试应该会按预期为您提供正确的值。确保您没有重新评估 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_
我在 Java 中创建了一个正则表达式模式,显然,匹配器 class 在字符串中找到了它,但它没有返回正确的值。
如果您看到这个 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 位服务器。
我是 Whosebug、Java 和 Eclipse 的新手。
查看您的屏幕截图,其中显示 m.find()
为 true
并且分配给 isMatch
变量的相同值是 false
,这意味着两者不同步,我能想到的唯一原因是,因为你处于调试模式并且因为你在表达式 window 中有它们,m.find()
似乎被执行了多次,其中 [ 的第一个时间值=12=] 一定是真的,但是当它再次执行时,下次它与数据不匹配并且 m.find()'s
值变成 false
并且最终被分配给 isMatch
变量.
尝试摆脱调试模式,只是 运行 代码和变量 isMatch
的值应该同步并且应该符合预期。或者您甚至可以在调试代码时关闭表达式 window,并且调试应该会按预期为您提供正确的值。确保您没有重新评估 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_