0

数字などの文字列から特定のものを抽出できるようにしたいのですが、速度と精度の両方の観点から、このアクションを実行するための最も効率的な方法は何ですか?

たとえば、次のようなファイルがある場合:PingFile.txtその内容は次のようにパイプされたサーバーのpingです。

PING google.com (74.125.224.46): 56 data bytes
64 bytes from 74.125.224.46: icmp_seq=0 ttl=45 time=5.134 ms
64 bytes from 74.125.224.46: icmp_seq=1 ttl=45 time=5.102 ms
64 bytes from 74.125.224.46: icmp_seq=2 ttl=45 time=5.062 ms
64 bytes from 74.125.224.46: icmp_seq=3 ttl=45 time=4.988 ms
64 bytes from 74.125.224.46: icmp_seq=4 ttl=45 time=5.368 ms
64 bytes from 74.125.224.46: icmp_seq=5 ttl=45 time=5.012 ms

時間の値(5.134、5.102、5.062など)のみを抽出して、文字列の代わりにfloatまたはdoubleを解析したい場合。どうすればいいですか?

ありがとう、

ユーデン

4

3 に答える 3

1

regex="time=[0-9\\.]+"文字列を次のように見つけるために使用できるtime=5.134と思いますtime=5.102

次に"time=5.134".substring(5)、数値部分を取得するために部分文字列を実行します。

以下のコードサンプル:

String timeString = "64 bytes from 74.125.224.46: icmp_seq=0 ttl=45 time=5.134 ms";
Pattern timePattern = Pattern.compile("time=[0-9\\.]+");
Matcher timeMatcher = timePattern.matcher(timeString);
if(timeMatcher.find()){
    String timeS = timeMatcher.group(0);
    System.out.println(timeS);
    String time = timeS.substring(5);
    System.out.println(time);
    double t = Double.parseDouble(time);
    System.out.println(t);
}
于 2012-10-23T18:45:09.793 に答える
0

あなたは各行に対してそれを行うことができます:

String[] tokens = line.split(" ");
String timeString = tokens[tokens.length-2];
float time = Float.parseFloat(timeString);

必要に応じて、BufferedReaderを使用して行ごとに読み取ることができます。

于 2012-10-23T18:44:08.827 に答える
0

それを行う方法はたくさんあります...

  • Patternクラスを使用しますが、それはおそらくあなたが望むものにとって非常に重いものです
  • Scannerクラスを使用しますが、それでも必要以上の可能性があります
  • string.split( "")[6]、およびFloat.valueOf()(またはDouble.valueOf())を使用する

他にも方法があると思います。

于 2012-10-23T18:46:08.353 に答える