Java:尝试在特定字符串和几个字符之后找到一行中的字符串

时间:2012-10-15 10:02:26

标签: java

我有一个日志文件,其中包含如下所示的行。

  

GET / common / data / register / HTTP / 1.1“200 254614”https://www.test.com/hiii/“Mozilla / 5.0(Windows NT 6.1; WOW64; rv:10.0.8)Gecko / 20100101火狐/

我正在尝试获取上述行中的http状态代码200。 这将放在字符串HTTP/1.1"之后。 http的版本(此处为1.1)在所有行中可能并不常见。

请帮我找出每行中的http状态代码。

3 个答案:

答案 0 :(得分:1)

使用inputString.split(" ")将返回字符串数组,第3个元素应该是状态代码。

答案 1 :(得分:1)

试试这个正则表达式: -

    String str = "GET /common/data/register/ HTTP/1.1\" 200 254614 " +
            "https://www.test.com/hiii/ Mozilla/5.0 " +
            "(Windows NT 6.1; WOW64; rv:10.0.8) " +
            "Gecko/20100101 Firefox/ ";

    Pattern pattern = Pattern.compile("HTTP/\\d.\\d\"\\s(\\d{3})");
    Matcher match = pattern.matcher(str);

    while (match.find()) {
        System.out.println(match.group(1));  // Prints 200
    }

以下是对上述正则表达式的解释: -

  • HTTP/\\d.\\d\" - >将匹配HTTP/1.1"。您可以拥有任何身份(例如:5.4)

  • \\d.\\d - >匹配由点分隔的两位数字。

  • (\\d{3}) - >匹配连续性中的3位数以匹配状态代码。我们已经在一个小组中捕获了它,因为我们想要这些信息。

答案 2 :(得分:0)

该行是否始终包含http / 1.1? 如果是这样,你应该能够在java http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#substring(int,int)

中使用substring方法