Java 获取字符串的特定值

Java 获取字符串的特定值,java,Java,使用java Scanner类,我得到一个字符串作为流 try { Scanner scanner = new Scanner(new File("/tmp/log.txt")); while (scanner.hasNextLine()) { String line = scanner.nextLine(); //manipulate line

使用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\u CT”(她22岁)的值。感谢有人能帮助使用字符串函数或任何扫描函数来获得这些值。 注意:“DB2.QUERY\u CT”的位置并不总是相同的,在这里逗号(,)用作分隔符

谢谢

我认为这里最简单(最快)的解决方案是将字符串拆分为“,”,然后迭代各个部分,直到得到一个以DB2.QUERY\u CT开头的部分。然后取=。这不漂亮,但会有用的。其他选项包括,使用String.indexOf查找参数的位置,然后查找下一个,并对差异进行子串。正则表达式,类似于.*DB2.QUERY\u CT=(.),。然后,如果它匹配,得到组1,你就有了你的值

如果您需要其中任何一个的伪代码/函数代码,请告诉我。

我认为最简单(最快)的解决方案是将字符串拆分为“,”,然后迭代各个部分,直到得到一个以DB2.QUERY\u CT开头的部分。然后取=。这不漂亮,但会有用的。其他选项包括,使用String.indexOf查找参数的位置,然后查找下一个,并对差异进行子串。正则表达式,类似于.*DB2.QUERY\u CT=(.),。然后,如果它匹配,得到组1,你就有了你的值

如果您需要其中任何一个的伪/函数代码,请告诉我。

使用该函数将逗号处的行
拆分为字符串数组。 然后在新数组上迭代,在等号处调用进一步的拆分,这将生成一个包含2个元素的字符串数组。只需将第一个索引与您的搜索值进行比较,就完成了

如果遇到问题,请尝试并向我们展示您的代码。

使用该函数将逗号处的行拆分为字符串数组。 然后在新数组上迭代,在等号处调用进一步的拆分,这将生成一个包含2个元素的字符串数组。只需将第一个索引与您的搜索值进行比较,就完成了


如果您遇到问题,请尝试一下并向我们展示您的代码。

我不会向您展示完整的解决方案,但您可以做以下几点:

如果这是一种固定格式,则可以使用来获取DB2.QUERY\u CT=“”的索引,然后(因为您知道DB2.QUERY\u CT=的长度),就可以知道数字的起始位置并将其提取出来


其他解决方案将使用regex..

我不会向您展示完整的解决方案,但在这里您可以做什么:

如果这是一种固定格式,则可以使用来获取DB2.QUERY\u CT=“”的索引,然后(因为您知道DB2.QUERY\u CT=的长度),就可以知道数字的起始位置并将其提取出来


另一种解决方案是使用regex..

在下面的代码中,首先尝试查找DB2.QUERY\u CT“是否存在,如果是,将从“DB2.QUERY\u CT=“.So line的新值为”=22,DB2.UPDATE\u CT=1……”之后的原始字符串中获取子字符串。然后将再次从0到第一个分隔符,即“,从而找到DB2.QUERY\u 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);

在这里,下面的代码,首先尝试查找DB2.QUERY_CT“是否存在,如果是,将从“DB2.QUERY_CT=“.So行的新值为”=22,DB2.UPDATE_CT=1……”之后的原始字符串中获取子字符串。然后,将再次从0到第一个分隔符,即“,”获取该新字符串的子字符串,从而查找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);

您的问题没有解释您为尝试解决问题所做的工作;它目前看起来像是对代码的请求。请分享您尝试的实现,并解释它如何无法满足您的要求。@Duncan,什么问题?您的问题没有解释您为尝试解决问题所做的工作;它目前看起来像是一个请求请分享您尝试的实现,并解释它如何无法满足您的需求。@Duncan,什么问题?我答对了:它得到一个子字符串,从“DB2.QUERY\u CT”开始“值,并从新的子字符串中读取从0索引到分隔符的值。感谢您的时间和帮助。我答对了:它从“DB2.QUERY_CT”值开始读取子字符串,从新的子字符串中读取从0索引到分隔符的值。感谢您的时间和帮助。”。