【问题标题】:How do I add delimiters between strings in Java?如何在 Java 中的字符串之间添加分隔符?
【发布时间】:2015-11-21 07:58:07
【问题描述】:

我这里有这个示例日志文件:

LOG FILE: 
Jan 1 22:54:17 drop   %LOGSOURCE% >eth1 rule: 7; rule_uid: {C1336766-9489-4049-9817-50584D83A245};
Jan 1 22:54:22 drop   %LOGSOURCE% >eth1 rule: 7; rule_uid: {C1336766-9489-4049-9817-50584D83A245};
Jan 1 22:54:23 drop   %LOGSOURCE% >eth1 rule: 7; rule_uid: {C1336766-9489-4049-9817-50584D83A245};
Jan 1 22:54:41 drop   %LOGSOURCE% >eth1 rule: 7; rule_uid: {C1336766-9489-4049-9817-50584D83A245};

默认分隔符是分号 (;),我想用该分隔符分隔时间戳和“drop”,以及带有“%LOGSOURCE%”的“drop”。我跑了代码(见下文,成功但没有得到我预期的结果。整个代码是插入分隔符。)

我的代码: 公共类 LogParser {

    List<String> temps = new ArrayList<String>();

    // while loop
    while (inFile1.hasNext()) {
        // find next line
        String token1 = inFile1.next();
        temps.add(token1);
    }
    inFile1.close();

    String[] tempsArray = temps.toArray(new String[0]);

    for (String s : tempsArray) {
        Pattern p = Pattern.compile("([a-zA-Z]{3}\\s\\d{1,2}\\s\\d{2}:\\d{2}:\\d{2})(\\s)(drop)");
        Matcher matcher = p.matcher(s);
        while (matcher.find()) {
            //System.out.println(matcher.group(0));
        }
        //System.out.println(s);
    }

【问题讨论】:

  • 谷歌:split with delimiter in java
  • 到目前为止,您尝试了哪些方法,在使用它时遇到了哪些问题?另一方面,看看你的用户名,也许这是问你的错误问题

标签: java parsing logging


【解决方案1】:

如果你想使用正则表达式,你可以使用:

([a-zA-Z]{3}\\s\\d{1,2}\\s\\d{2}:\\d{2}:\\d{2})(\s)(drop)

作为正则表达式replaceAll,替换为$1; $3

如果你没有在java中运行正则表达式并且不需要转义\,那么试试:

([a-zA-Z]{3}\s\d{1,2}\s\d{2}:\d{2}:\d{2})(\s)(drop)

输出:

LOG FILE: 
Jan 1 22:54:17; drop   %LOGSOURCE% >eth1 rule: 7; rule_uid: {C1336766-9489-4049-9817-50584D83A245};
Jan 1 22:54:22; drop   %LOGSOURCE% >eth1 rule: 7; rule_uid: {C1336766-9489-4049-9817-50584D83A245};
Jan 1 22:54:23; drop   %LOGSOURCE% >eth1 rule: 7; rule_uid: {C1336766-9489-4049-9817-50584D83A245};
Jan 1 22:54:41; drop   %LOGSOURCE% >eth1 rule: 7; rule_uid: {C1336766-9489-4049-9817-50584D83A245};

【讨论】:

    最近更新 更多