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.
有没有办法不删除分隔图案?
只有在前面有一个">"char 时才打破换行符:
scanner.useDelimiter("(?<=>)\\R"); // Note you can pass a string directly
Run Code Online (Sandbox Code Playgroud)
\R是一个独立于系统的新行
(?<=>)是一个看起来后面断言(不消耗)前一个char是a>
再加上它很酷,因为<=>看起来像Darth Vader的TIE战斗机.