我的记录格式如下:
记录 1 行
记录 1 行
记录 1 行
记录 2 行
记录 2 行
记录 2 行
...
我想使用 java Scanner 来拉出每条记录的行。但是,我的模式似乎无法正常工作。
new Scanner(reader).useDelimiter(Pattern.compile("^\\s*$"));
我取回我的输入,而不是scanner.next() 给我每条记录的行。
我的记录格式如下:
记录 1 行
记录 1 行
记录 1 行
记录 2 行
记录 2 行
记录 2 行
...
我想使用 java Scanner 来拉出每条记录的行。但是,我的模式似乎无法正常工作。
new Scanner(reader).useDelimiter(Pattern.compile("^\\s*$"));
我取回我的输入,而不是scanner.next() 给我每条记录的行。
我想出的解决方案是这样的:
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 3scanner.next()
record 2 line 1
record 2 line 2
record 2 line 3
我想要多行我会尝试
"\\n\\n+"
这有点猜测,但你真的需要在这里使用正则表达式吗?我认为您只需将分隔符设置为新行字符即可。
我会这样做。
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);
我没有对此进行测试,因此可能会有一些愚蠢的错误。