获取String的特定值

时间:2013-12-05 12:13:02

标签: java

使用java Scanner类我得到一个字符串作为流

    try {

        Scanner scanner = new Scanner(new File("/tmp/log.txt"));

        while (scanner.hasNextLine()) {
            String line = scanner.nextLine();                

            //manipulate line      
        }
        scanner.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

我得到的字符串看起来像

line = "[2013-12-02 10:13:47,125]: R="RUNNING.JOB.Q", 
REQUEST_UUID="7e1ed77c-afe3-992d-bc86-824ce73f4b6b", 
SRC_OBJ="ScheduledEvent.14060204",
DB2.QUERY_CT=22,
DB2.UPDATE_CT=1,
DB2.SVR_MS=52,
DB2.IO_MS=66, 
DB2.DRV_MS=74"

我想要的是获得“DB2.QUERY_CT”的价值(她的22)感谢有人可以使用字符串函数或任何扫描仪函数来帮助获取此值。 注意:“DB2.QUERY_CT”的位置不一定总是变化,这里逗号(,)用作分隔符。

由于

4 个答案:

答案 0 :(得分:2)

使用String.split()函数将逗号,中的行拆分为字符串数组。 然后迭代新数组,在等号=调用另一个拆分,这将生成一个包含2个元素的String数组。只需将第一个索引与您的搜索值进行比较即可。

尝试一下,如果你遇到困难,请告诉我们你的代码。

答案 1 :(得分:2)

这里,下面的代码,尝试首先查找DB2.QUERY_CT是否存在,如果是,则在“DB2.QUERY_CT =”之后将从原始字符串中获取子字符串。所以line的新值是“= 22, DB2.UPDATE_CT = 1 ........“然后将再次获取此新字符串的子字符串,从0到第1个分隔符,即”,“,从而找到DB2.QUERY_CT的值。

我希望这会有所帮助

String line = "[2013-12-02 10:13:47,125]: R=\"RUNNING.JOB.Q\", REQUEST_UUID=\"7e1ed77c-afe3-992d-bc86-824ce73f4b6b\", SRC_OBJ=\"ScheduledEvent.14060204\", DB2.QUERY_CT=22, DB2.UPDATE_CT=1, DB2.SVR_MS=52, DB2.IO_MS=66, DB2.DRV_MS=74";
            String valueOf = "DB2.QUERY_CT";
            String delimiter = ",";
            String value = null;
            if (line.indexOf(valueOf) > -1){
                line =  line.substring(line.indexOf(valueOf) + valueOf.length() + 1);
                value  = line.substring(0, line.indexOf(delimiter));
                value = value.trim();
            }

            System.out.println("Value  " + value);

答案 2 :(得分:1)

我认为这里最简单(最快)的解决方案是将字符串拆分为“,”然后遍历这些部分,直到你有一个以DB2.QUERY_CT开头的部分。然后在=后取剩余的字符串。它不漂亮,但它会起作用。其他选项包括,使用String.indexOf查找参数的位置,然后是下一个,以及子串的差异。正则表达式,类似于。* DB2.QUERY_CT =(。),. 然后如果匹配,则得到组1,你就有了自己的价值。

如果你需要一些伪/功能代码,请告诉我。

答案 3 :(得分:1)

我不会向您展示完整的解决方案,但在此您可以做的是:

如果这是固定格式,您可以使用String#indexOf获取"DB2.QUERY_CT="的索引,然后(因为您知道DB2.QUERY_CT=的长度,您可以知道该数字的开头位置并提取它。

其他解决方案是使用正则表达式。