我想编写一个程序来解析Java垃圾收集日志。我刚刚创建了一个与小集合相匹配的语法。一旦我确定了一种模式,我想将它解析为单个的令牌。我的问题是,有没有用我以前定义的语法来做这件事的优雅方法?基于正则表达式的拆分模式
public class RegexTestHarness {
private final static String REGEX_SMALL_COLLECTION = "\\d+\\.\\d+: \\[GC \\d+.\\d+: \\[ParNew: \\d+K\\-\\>0K\\(\\d+K\\), \\d+.\\d+ secs\\] \\d+K\\-\\>\\d+K\\(\\d+K\\), \\d+.\\d+ secs\\]";
public static void main(String[] args){
Pattern pattern = Pattern.compile(REGEX_SMALL_COLLECTION);
Matcher matcher = pattern.matcher("54.770: [GC 54.770: [ParNew: 5232768K->0K(5237824K), 1.1304192 secs] 5238622K->380448K(10480704K), 1.1306410 secs]");
while (matcher.find()) {
System.out.println(matcher.group(0));
System.out.println(matcher.start());
System.out.println(matcher.end());
}
}
}
有什么问题吗?你看起来像是一个很好的开始,尽管我会写一个单元测试,每个测试都有一个GC日志中的一行 – hvgotcodes 2012-07-26 13:22:37
我传递给pattern.matcher的字符串被正确解析,这意味着它匹配模式,但是我的下一步是I想将字符串拆分为令牌。对于上面的示例:54.770,54.770,5232768,5237824,1.1304192 ...等等。我觉得根据我提供的模式,必须有一种我可以调用的方法来分割我的模式。 – ddd 2012-07-26 13:31:33
啊我现在明白了。添加了一个答案... – hvgotcodes 2012-07-26 13:35:21