2013-03-08 53 views
0

我正在嘗試ping,並將ping概要列出在Matcher.group(0)中。其中顯示的平總結的結果是:可以將Matcher.group(n)與Java中的String進行比較?

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) 

能I /我怎樣才能將這些結果?我的意思是,我可以這樣做:

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

需要一些提示和指引,得益於先進的^^」

回答

1

您只需要捕捉毫秒數。如果在正則表達式中有類似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) ... 

這樣,這將是便於以後去改變它,如果你需要,而無需通過您的代碼到處搜尋。

+0

哇,謝謝......通過查看你的代碼是有教育意義的,我會在改變我的一些代碼邏輯之後嘗試它。 .. 非常感謝... – 2013-03-08 19:13:46

0

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

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

+0

謝謝,但之後我嘗試在線程「主要」 java.lang.IllegalStateException這樣做...... 例外:未找到匹配 也許我會盡量調整我的代碼邏輯,謝謝... – 2013-03-08 19:11:28

+0

這將無法工作。例如,'time = 9ms'會使用字符串比較比較大於'time = 66ms',但你幾乎肯定希望它比較少。 – yshavit 2013-03-08 19:14:24

0

數據格式爲「time」,後跟「=」,後面跟着「=」 「數字」,其次是「毫秒」

試試這個:

  1. 解析字符串,找到毫秒值。一個正則表達式是「time = \ d.ms」
  2. 將毫秒值轉換爲數字。考慮這樣的事情:Integer.valueOf(blam)。
  3. 比較來自具有某個閾值的ping的數字值毫秒。
+0

謝謝,我現在會盡力去做... 真的非常感謝你的指導...... – 2013-03-08 19:10:42

相關問題