如何使用Java将文件分解为基于正则表达式的标记

jlp*_*jlp 3 java regex java.util.scanner

我有一个以下格式的文件,记录由换行符分隔,但有些记录在其中有换行符,如下所示.我需要获取每条记录并单独处理它们.该文件的大小可能只有几个Mb.

 <?aaaaa>
 <?bbbb
     bb>
 <?cccccc>
Run Code Online (Sandbox Code Playgroud)

我有代码:

 FileInputStream fs = new FileInputStream(FILE_PATH_NAME);
 Scanner scanner = new Scanner(fs);
 scanner.useDelimiter(Pattern.compile("<\\?"));
 if (scanner.hasNext()) {
     String line = scanner.next();
     System.out.println(line);
 } 
 scanner.close();
Run Code Online (Sandbox Code Playgroud)

但我得到的结果有开头<\?删除:

aaaaa>
bbbb
   bb>
cccccc>
Run Code Online (Sandbox Code Playgroud)

我知道Scanner会消耗任何与分隔符模式匹配的输入.我能想到的只是将分隔符模式添加回每个记录中的mannully.

有没有办法不删除分隔图案?

Boh*_*ian 5

只有在前面有一个">"char 时才打破换行符:

scanner.useDelimiter("(?<=>)\\R"); // Note you can pass a string directly
Run Code Online (Sandbox Code Playgroud)

\R是一个独立于系统的新行
(?<=>)是一个看起来后面断言(不消耗)前一个char是a>

再加上它很酷,因为<=>看起来像Darth Vader的TIE战斗机.