【发布时间】:2021-04-21 00:12:44
【问题描述】:
我在 Eclipse 上使用 Java 8 并尝试使用正则表达式来检测文件中的字符串,但我没有检测到任何东西。我已经单独测试了正则表达式,它成功匹配了我正在搜索的文件中的字符串。我成功地从文件中读取,因为我能够打印整个内容。我还尝试了使用 Pattern.compile() 的更简单的正则表达式,比如尝试匹配单个字母。但无论输入如何,它都不会检测到任何东西。
有人知道会发生什么吗?
File logText = new File("C:\\\\Users\\\\textFileLocation.txt");
Scanner s;
try {
s = new Scanner(logText);
Pattern p = Pattern.compile("\\w+Exception:[^\\n]+");
System.out.println(s.hasNext(p));
while(s.hasNextLine()){
System.out.println(s.nextLine());
}
s.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
这是文件中的内容:
2021-01-14 12:06:33,165 错误服务器内部服务器异常 #11: java.lang.IllegalStateException:尝试访问“地址”类型的 bean
这是输出
false
2021-01-14 12:06:33,165 ERROR Server INTERNAL SERVER EXCEPTION #11:
java.lang.IllegalStateException: Attempt to access bean of type "Address"
【问题讨论】:
-
hasNext(Pattern): "如果下一个完整令牌与指定的模式匹配,则返回true"。如果您的文本开始不是以匹配\w+Exception的内容(它不匹配),那么s.hasNext(p)在您检查它时将是错误的。 -
Windows 文件名中不需要双反斜杠。
new File("C:\\Users\\textFileLocation.txt")就足够了。
标签: java regex java-8 java.util.scanner