分割/删除特定字符串的有效方法

时间:2014-12-26 00:08:33

标签: java regex string split

我有以下字符串示例:

[14:48:51.690] LOGON           error group: 103

我和他们有很多不同。唯一的事情是,开头总是相同的期望日期(总是在括号中)和名称LOGON。我想在前面删除你。 如何有效地实现这一目标?正则表达式?拆分并从数组中删除?

我唯一想要的就是

error group: 103

4 个答案:

答案 0 :(得分:2)

您可以根据正则表达式\[\d{1,2}:\d{1,2}:\d{1,2}\.\d{1,3}\]\s*\w*\s*

拆分字符串
import java.util.regex.Pattern;

public class T {

    public static void main(String[] args) {
        String s = "[14:48:51.690] LOGON           error group: 103";

        String[] split = s.split("\\[\\d{1,2}:\\d{1,2}:\\d{1,2}\\.\\d{1,3}\\]\\s*\\w*\\s*");

        System.out.println(split[1]);
    }
}

输出

error group: 103

答案 1 :(得分:1)

以下是使用简单正则表达式的另一种方法:

    Pattern pattern = Pattern.compile("\\[.*\\]\\s*LOGON\\s*(.*)\\s*");

    Matcher matcher = pattern.matcher("[14:48:51.690] LOGON           error group: 103");
    if (matcher.find()) {
        System.out.println(matcher.group(1));           
    }

所以基本上我们扫描开括号,它里面的日期,结束括号,任何空格 介于两者之间,直到并使用(.*)捕获您正在寻找的部分。

答案 2 :(得分:1)

正则表达式是一项非常昂贵的任务。如果您正在搜索包含100,000行的日志文件,则需要花费太多时间!如果您的字符串始终具有相同的模式,请尝试使用它!

我假设您的行是:

[some_time] some_event         some event description

我现在能看到的最简单的方法就是搜索第二个空格,然后获取所有内容。

public class HelloWorld{

     public static void main(String []args){

        String s = "[14:48:51.690] LOGON           error group: 103";
        int pos = getPosOfFirstAlphaNumericCharAfterSecondSpace(s);
        if (pos > 0)
            System.out.println(s.substring(pos));
     }

     private static int getPosOfFirstAlphaNumericCharAfterSecondSpace(String s) {
         int countSpaces = 0;
         for(int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == ' ')
                countSpaces++;
            else if (countSpaces >= 2)
                return i;
         }
         return -1;

     }
}

答案 3 :(得分:0)

假设事件文本(在您的情况下为“LOGIN”)是全部大写和一个字:

String target = str.replaceAll(".*?\\]\\s*[A-Z]+\\s*", "");