在Java中使用Scanner时,在令牌中包含分隔符

时间:2013-10-30 19:26:21

标签: java regex java.util.scanner regex-lookarounds

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

DEMO

答案 1 :(得分:0)

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

Pattern pattern = Pattern.compile("(?=Processed Value.+?\\n+)", Pattern.UNIX_LINES);