0

ping を実行して、Matcher.group(0) に一覧表示される ping の概要を取得しようとしています。表示される 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
       }

ヒントとガイドラインが必要です。よろしくお願いします^^"

4

3 に答える 3

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) ...

そうすれば、必要に応じて、コード全体を検索することなく、後で簡単に変更できます。

于 2013-03-08T19:08:52.707 に答える
0

compare文字列に対してメソッドを使用できます。

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

ifただし、elseブランチには必要ありません。

于 2013-03-08T19:01:35.787 に答える
0

データは既知の形式です: 「時間」の後に「=」が続き、「数字」の後に「ミリ秒」が続きます。

これを試して:

  1. 文字列を解析してミリ秒値を見つけます。これを行う 1 つの正規表現は、"time=\d.ms" です。
  2. ミリ秒値を数値に変換します。次のようなものを考えてみてください: Integer.valueOf(blam)。
  3. ping からの数値ミリ秒を何らかのしきい値と比較します。
于 2013-03-08T19:03:00.760 に答える