我想編寫一個程序來解析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