1

この文字列を解析するにはどうすればよいですか:

PING 192.168.1.2 (192.168.1.2) 56(84) バイトのデータ。192.168.1.2 からの 64 バイト: icmp_seq=1 ttl=64 時間=0.244 ms192.168.1.2 からの 64 バイト: icmp_seq=2 ttl=64 時間=0.274 ms64 192.168.1.2 からのバイト: icmp_seq=3 ttl=64 時間=0.275 ms 192.168.1.2 からの 64 バイト: icmp_seq=4 ttl=64 時間=0.306 ms - 192.168.1.2 ping 統計 ---5 パケット送信、5 受信、0% パケット損失、時間 4001msrtt min/avg/max/mdev = 0.244/0.329/0.550/0.114 ms

使用してみStringTokenizerましたが、適切な結果が得られませんでした。

私が試したコードは次のとおりです。

StringTokenizer tokens = new StringTokenizer(pingResult, ":");
String first = tokens.nextToken();// this will contain "Fruit"
String second = tokens.nextToken();
4

4 に答える 4

3

正規表現の一致を試してください:

public static void findMatch(){
        String str = "PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.64 bytes from 192.168.1.2" +
                ": icmp_seq=1 ttl=64 time=0.244 ms64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.274 ms64 " +
                "bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.275 ms64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.306 ms64 " +
                "bytes from 192.168.1.2: icmp_seq=5 ttl=64 time=0.550 ms--- 192.168.1.2 ping statistics ---5 packets transmitted, " +
                "5 received, 0% packet loss, time 4001msrtt min/avg/max/mdev = 0.244/0.329/0.550/0.114 ms";

        String regexPattern = "icmp_seq=\\d+ ttl=\\d+ time=.+?ms";
        Pattern pattern = Pattern.compile(regexPattern);

        Matcher matcher = pattern.matcher(str);

        while (matcher.find()){
            System.out.println(str.substring(matcher.start(), matcher.end()));
        }
    }

結果:

icmp_seq=1 ttl=64 時間=0.244 ミリ秒

icmp_seq=2 ttl=64 時間=0.274 ミリ秒

icmp_seq=3 ttl=64 時間=0.275 ミリ秒

icmp_seq=4 ttl=64 時間=0.306 ミリ秒

icmp_seq=5 ttl=64 時間=0.550 ミリ秒

于 2013-07-29T07:50:41.200 に答える
2

一人StringTokenizerではうまくいきません。StringTokenizerwithsubstringを使用して、期待される結果を得ることができます。つまりStringTokenizer、トークンは " " として与えられicmp_seq=1 ttl=64 time=0.244 ms64 bytes from 192.168.1.2ます。トークン化された文字列から部分文字列を実行できます。何かのようなもの :

String finalString=tokenizedString.substring(0,tokenizedString.indexOf(ms)+1);

答えは少し汚いですが、目的は解決します。

于 2013-07-29T07:34:01.627 に答える
2

これを試して、

 while(tokens.hasMoreElements())
{
   String subStringValue = tokens.nextToken();
   System.out.println("token : " + StringUtils.substringBetween(subStringValue, "", "ms")+"ms");
}

StringUtils.substringBetween

于 2013-07-29T07:34:01.037 に答える