0

我的记录格式如下:

记录 1 行
记录 1 行
记录 1 行

记录 2 行
记录 2 行
记录 2 行

...

我想使用 java Scanner 来拉出每条记录的行。但是,我的模式似乎无法正常工作。

new Scanner(reader).useDelimiter(Pattern.compile("^\\s*$"));

我取回我的输入,而不是scanner.next() 给我每条记录的行。

4

4 回答 4

3

我想出的解决方案是这样的:
new Scanner(reader).useDelimiter(Pattern.compile("^\\s*$", Pattern.MULTILINE));

这会将记录行作为一个组返回:
scanner.next()
yield: 再次执行 yield: 如果您只需要单独的行,请使用 @bart 的解决方案。
record 1 line 1
record 1 line 2
record 1 line 3

scanner.next()

record 2 line 1
record 2 line 2
record 2 line 3

于 2012-04-19T14:36:57.373 回答
0

我想要多行我会尝试

"\\n\\n+"
于 2012-04-18T17:41:00.800 回答
0

这有点猜测,但你真的需要在这里使用正则表达式吗?我认为您只需将分隔符设置为新行字符即可。

于 2012-04-18T17:41:50.320 回答
0

我会这样做。

StringBuilder sb = new StringBuilder();
ArrayList<String> records = new ArrayList<String>();
while(scanner.hasNextLine()){
    String line = scanner.nextLine();
    if("".equals(line.trim())){
        records.add(sb.toString());
        sb = new StringBuilder();
    }else{
        sb.append(line);
        sb.append("\n");
    }
}
System.out.println(records);

我没有对此进行测试,因此可能会有一些愚蠢的错误。

于 2012-04-18T18:02:48.003 回答