我想从文件中读取记录。一条记录可以跨越多行。这些线通过“-”(减号)连接。 示例文件:
Alice, 23, SampleRoad 120, SampleTown
Bob, 25, SampleRoad 15A, SampleTown, -
Tel: 0545848, Mail: bob@hotmail.com
Chris, 27, SampleRoad, SampleTown
我使用 Scanner 类来读取文件:
private static void readFile(String fileName) {
Pattern PATTERN_RECORD = Pattern.compile(".*", Pattern.MULTILINE);
try {
File file = new File(fileName);
Scanner scanner = new Scanner(file);
scanner.useDelimiter("(?!-)[\\r\\n]+"); //not a '-' followed by crlf
int iRecord = 0;
while (scanner.hasNext(PATTERN_RECORD)) {
System.out.println(++iRecord + ": " + scanner.next());
}
scanner.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
我的理解是扫描仪分隔符模式定义了作为“记录”处理的内容。
这是结果:
1: Alice, 23, SampleRoad 120, SampleTown
2: Bob, 25, SampleRoad 15A, SampleTown, -
3: Tel: 0545848, Mail: bob@hotmail.com
4: Chris, 27, SampleRoad, SampleTown
这就是我想要的:
1: Alice, 23, SampleRoad 120, SampleTown
2: Bob, 25, SampleRoad 15A, SampleTown, Tel: 0545848, Mail: bob@hotmail.com
3: Chris, 27, SampleRoad, SampleTown
也许 Scanner 类不适合这里
最佳答案
问题是你的分隔符正则表达式。您应该使用后视而不是前视。尝试像这样更改它:
scanner.useDelimiter("(?<!-)[\\r\\n]+");
关于Java 扫描器和行延续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6730976/