2011-02-10 44 views
1

我正在嘗試使用一系列正則表達式來解析文件中的標記。我需要對換行符進行計數,並且能夠分離它們之間沒有空格的標記。不幸的是,java.util.Scanner的findWithinHorizo​​n()方法搜索整個輸入流的其餘部分(直到水平線)作爲正則表達式匹配的開始,但我想匹配從當前文件位置開始的正則表達式。具體來說,我有一堆正則表達式,並希望遍歷它們以查看哪個匹配從文件中的當前位置開始,然後在正則表達式匹配之後將文件位置向右移動,並繼續。這可能嗎?如何使用正則表達式來解析Java中的文件?

掃描儀的next()方法似乎對此無用,因爲它強制使用分隔符,正則表達式必須匹配整個標記;我想從當前文件位置匹配,獲取匹配的字符串,並在匹配之後將文件搜索前進。

+0

有多大這些文件?他們可以一次讀入內存嗎? – 2011-02-10 08:53:13

回答

0

選項:

  1. 閱讀整個文件到內存中的字符串。然後直接在你想要的位置使用Matcher

  2. 使用從RandomAccessFile獲取的FileChannel作爲Scanner的輸入。然後您可以直接操縱通道的位置。

  3. 如上所述使用FileChannel,但直接使用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. 
+0

是的,我可以將文件讀入內存。對於第二種方式,您如何使用Scanner從當前位置進行匹配並且沒有分隔符?對於第一種和第三種方式,你如何讓Matcher從當前位置開始,然後獲得匹配的字符串並超越它以進行下一場比賽?謝謝 – MMM 2011-02-10 14:30:26

相關問題