我正在尝试使用一系列正则表达式来解析文件中的标记。我需要计算换行符并能够分隔它们之间没有空格的标记。不幸的是,java.util.Scanner的findWithinHorizon()方法搜索整个输入流的其余部分(直到地平线)以获得正则表达式匹配的START,但我想匹配从当前文件位置开始的正则表达式。具体来说,我有一堆正则表达式,并希望循环遍历它们以查看哪一个匹配从文件中的当前位置开始,然后在正则表达式匹配后将文件位置提前到右边,然后继续。这可能吗?
扫描程序的next()方法对此似乎没用,因为它强制执行分隔符,正则表达式必须匹配整个令牌;我想从当前文件位置匹配,获取匹配的字符串,并在匹配后将文件搜索推进。
答案 0 :(得分:0)
选项:
将整个文件作为String读入内存。然后直接在您想要的位置使用Matcher
。
使用从FileChannel
获取的RandomAccessFile
作为Scanner
的输入。然后,您可以直接操纵频道的位置。
使用上述FileChannel
,但直接使用Matcher
可获得更大的灵活性。
将Matcher与RandomAccessFile一起使用的示例:
FileChannel fc = file.getChannel();
fc.lock(); // so it doesn't change under you
ByteBuffer bb = ByteBuffer.allocate(BUFFER_SIZE);
CharBuffer cb = bb.asCharBuffer();
fc.read(bb);
Matcher matcher = pattern.matcher(cb);
// etc.