使用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”的位置不一定总是变化,这里逗号(,)用作分隔符。
由于
答案 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=
的长度,您可以知道该数字的开头位置并提取它。
其他解决方案是使用正则表达式。