2

我想使用 Java Scanner 对象将文件行“块”读入对象。分隔符需要包含在令牌中。我尝试使用正则表达式lookbehind,但分隔符是可变长度的。有没有人有获得分隔符的建议或替代方法?

我目前拥有的 Java 代码(错误地删除了“处理值”行):

ArrayList<ProcessedData> stack = new ArrayList<ProcessedData>();    

Scanner scanner = new Scanner(new File("/home/user/data.txt"));
Pattern pattern = Pattern.compile("Processed Value.+?\\n+", Pattern.UNIX_LINES);
scanner.useDelimiter(pattern);

while(scanner.hasNext()) {
    stack.add(new ProcessedData(scanner.next()));
}

示例文件:

Id: 1
Raw Value: 1234
Processed Value{423}: A3s2344

Id: 36
Raw Value: 389001
Processed Value{2}: "Access Success"

Id: 28934
Raw Value: 2402
Processed Value: 1345.2 seconds
4

2 回答 2

1

似乎您需要的信息之间有一个空行,因此可以尝试在该空行上拆分数据。您可以尝试使用此分隔符

Pattern pattern = Pattern.compile("(\r?\n){2,}");
scanner.useDelimiter(pattern);

演示

于 2013-10-30T19:36:16.247 回答
0

您可以在正则表达式中使用前瞻:

Pattern pattern = Pattern.compile("(?=Processed Value.+?\\n+)", Pattern.UNIX_LINES);
于 2013-10-30T19:39:09.040 回答