Java Scanner用空行拆分记录

时间:2012-04-18 17:36:56

标签: java regex java.util.scanner

我的记录格式如下:

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

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

...

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

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

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

4 个答案:

答案 0 :(得分:3)

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

这会将记录行作为一组返回:
    scanner.next()
产量:
    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

如果您只想单独使用这些行,请使用@bart的解决方案。

答案 1 :(得分:0)

我想要多行,我会尝试

"\\n\\n+"

答案 2 :(得分:0)

这是一个猜测,但你真的需要在这里使用正则表达式吗?我想你只需要将分隔符设置为新行char。

答案 3 :(得分: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);

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