可以将Matcher.group(n)与Java中的String进行比较吗?

时间:2013-03-08 18:59:25

标签: java matcher string-comparison

我正在尝试ping并将ping摘要列在Matcher.group(0)中。显示的ping摘要结果为:

  

Matcher.group(0)

time=35ms
time=3ms
time=2ms
time=3ms
time=2ms
time=83ms
time=3ms
time=69ms
time=2ms
time=5ms
java.io.IOException: The pipe is being closed
BUILD SUCCESSFUL (total time: 9 seconds)

我能/我如何比较这些结果?我的意思是,我可以这样做:

if(m.group(0) >= "time=66ms") {
         //do something       
} else if (m.group(0) < "time=66ms") {
                 //do something
       }

需要一些提示和指导,感谢先进的^^“

3 个答案:

答案 0 :(得分:1)

您只想捕获毫秒数。如果在regexp中有time=\d+ms之类的内容,请改用time=(\d+)ms。然后,您可以使用matcher.group(1)来获取该字符串,并使用Integer.parseInt将其作为int。

int ms = Integer.parseInt(matcher.group(1));
if (ms >= 66) {
    // do something
}
else {
    // do something else
}

请注意,您不需要else if,只需else即可。如果int不是>= someValue,那么它必须是< someValue - 您不需要检查代码中的重言式。顺便说一句,我会把那个数字66放在一个常数的某个地方:

private static final int TIMEOUT_THRESHOLD = 66; // or some better name
...
int ms = Integer.parseInt(matcher.group(1));
if (ms >= TIMEOUT_THRESHOLD) ...

通过这种方式,如果您需要,可以在以后更改它,而无需在代码中随处搜索。

答案 1 :(得分:0)

您可以在字符串上使用compare方法:

if (m.group(0).compare("time=66ms") >= 0)
  // do something
} else {
  //do something
}

但是,if分支中不需要else

答案 2 :(得分:0)

数据采用已知格式:“时间”后跟“=”后跟“数字”后跟“ms”

试试这个:

  1. 解析字符串以查找毫秒值。一个正则表达式是“time = \ d.ms”
  2. 将毫秒值转换为数字。考虑这样的事情:Integer.valueOf(blam)。
  3. 将ping的数值毫秒与某个阈值进行比较。