我的记录格式如下:
记录1行
记录1行
记录1行
记录2行
记录2行
记录2行
...
我想使用java Scanner拉出每条记录的行。但是,我的模式似乎没有正常工作。
new Scanner(reader).useDelimiter(Pattern.compile("^\\s*$"));
我取回输入而不是scan.next()给我每条记录的行。
答案 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);
我没有对此进行测试,因此可能会有一些愚蠢的错误。