Java - 解析逻辑

时间:2016-09-27 07:18:57

标签: java parsing

SAMPLE DATA

ABC                  MP    XP
2RMM2,NS-0            0     0
5RMM2,NS-0            0     0
12RMM2,NS-0           0     0
RXT-1                       7
END

这是示例日志文件内容。我想为ABC Column下的所有值获取MP,XP参数值。有时MP / XP的值可能不存在。但是我想用默认值替换它,如果不是。 尝试使用StringTokenizer以及split方法,但在RXT-1行中,无法识别该值是用于MP还是XP 如何解析此文件,从而为每行保留MP / XP的正确参数值?

1 个答案:

答案 0 :(得分:0)

似乎是固定长度的记录。大概有6个职位。

List<String> lines = Files.readAllLines(Paths.get("..."));
lines.stream()
    .skip(3)
    .forEach(line -> {
        //          10        20
        // 01234567890123456789012345678
        // ABC                  MP    XP
        // 12RMM2,NS-0           0     0
        String abc = line.replace("^(.*)\\s.*$", "$1");
        String mpS = line.substring(abc.length() + 1, 22).trim();
        String xpS = line.substring(22).trim();
        int mp = mpS.isEmpty() ? -1 : Integer.parseInt(mp);
        int xp = xpS.isEmpty() ? -1 : Integer.parseInt(xp);
        ...
    });
);