Java - 字符串中的正则表达式匹配与文件中的读取行匹配



我不明白 Java 中正则表达式匹配的这种奇怪行为。我在Eclipse工作...

我有一个用 UTF-8 编码的.txt文件,其中文本行块由以下标识符划分:

[a]
.
.
.
[b]
.
.
[c]

等等...

我的程序使用以下BufferedReader读取此文件:

BufferedReader reader = null;
try {
  reader = new BufferedReader(new InputStreamReader(new FileInputStream("file.txt", Charset.forName("UTF-8"))); }
catch (FileNotFoundException e) { System.out.println("File not found!"); e.printStackTrace(); System.exit(0); }

这应该找到第一个标识符:

String line = "";
while (!line.matches("^\[.\]$")) { line = reader.readLine(); }

但它立即被跳过了!


但是当我尝试"手动"测试正则表达式时,它可以工作:

String line = "[a]";
if (line.matches("^\[.\]$")) { System.out.println("Regex matches"); }

这可能是一些微不足道的问题,但我完全陷入了困境!提前感谢您的回复!

编辑:

好吧,我将文本文件的编码更改为"ANSI",它刚刚开始正常工作 - 哦,我的上帝 - 为什么?!所以reader一定有问题——我会尽快找出来并编辑我的问题。

因此,当文本文件的编码为"UTF-8"时,正则表达式与文本文件的第一行不匹配,其中为"[a]",并与下面几行的下一个标识符匹配。怎么了?

编辑2:

大声笑我不能再信任 Windows 记事本了 - 我已经将该文件保存在其中......不久前,我使用PSPad编辑器保存了该文件,现在它工作正常!

首先FileInputStream没有带有参数文件字符集的构造函数(JavaDoc JDK)。也许您的代码中有错别字?

new FileInputStream("file.txt", Charset.forName("UTF-8"))

那么这是FileInputStream的不同实现吗?

其次,我尝试了这个带有括号修改的小测试:

    BufferedReader reader;
    reader = new BufferedReader(new InputStreamReader(
              new FileInputStream("target/classes/test.txt"), 
              Charset.forName("UTF-8")));
    String line = "";
    while (!line.matches("^\[.\]$")) { line = reader.readLine(); }
    System.out.println(line);

它刚刚工作并打印:

[a]

相关内容

  • 没有找到相关文章

最新更新