采取具体的一部分

时间:2012-03-24 16:48:34

标签: java java.util.scanner

您好我有一个包含跟踪路由和ping的日志文件。 我已经使用

分隔了这些
if (scanner.nextLine ().startsWith ("64 bytes"){}

所以我现在可以只使用ping。

所有我对ping感兴趣的是时间= XX

示例数据行=

64 bytes from ziva.zarnet.ac.zw (209.88.89.132): icmp_seq=119 ttl=46 time=199 ms

我一直在阅读其他人的类似问题,我不知道如何申请我的。

我确实只需要数字,因为我将它们放入csv文件中,这样我就可以制作数据图。

编辑:使用知识管理解决方案我现在正在屏幕上喷出我的ping,除了它正在做其他所有并且错过了第一个。

 while (scanner.hasNextLine ()) {
   //take only pings.
   if (scanner.nextLine ().startsWith ("64 bytes")){
       String line = scanner.nextLine ();       
       String pingAsString = line.substring (line.lastIndexOf ("=") + 1, (line.length () - "ms".length ()));
       Double ping = Double.valueOf (pingAsString);
       System.out.println ("PING AS STRING = "+ping);
   }
}

OK SORTED。只需要移动线路分配。 CAPS。但说清楚了。 :d

3 个答案:

答案 0 :(得分:3)

尝试使用RegularExpression提取您需要的数据:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegExTest {
    public static void main(String[] args) {
        String test = "line= 14103 64 bytes from ziva.zarnet.ac.zw (209.88.89.132): icmp_seq=119 ttl=46 time=199 ms";

        // build the regular expression string
        String regex = ".*time=(\\d+).*";

        // compile the regular expresion into a Pattern we can use on the test string
        Pattern pattern = Pattern.compile(regex);

        Matcher matcher = pattern.matcher(test);

        // if the regular expression matches, grab the value matching the
        // expression in the first set of parentheses: "(\d+)"
        if (matcher.matches()) {
            System.out.println(matcher.group(1));
        }
    }
}

答案 1 :(得分:1)

如果您不想执行reg-ex魔法,您可以使用String上的可用方法

String line = ...
String pingAsString = line.substring( line.lastIndexOf("=")+1, (line.length() - " ms".length() ) );
Integer ping = Integer.valueOf( pingAsString );

答案 2 :(得分:0)

Scanner scanner = new Scanner (new File ("./sample.log")); 
while (scanner.hasNext ())
{
    String line = scanner.nextLine (); 
    if (line.startsWith ("64 bytes")) {
         String ms = line.replaceAll (".*time=([0-9]+) ms", "$1");
         System.out.println ("ping = " + ms); 
    } // else System.out.println ("fail " + line); 
}

你的问题是,你打电话:

if (scanner.nextLine ().startsWith ("64 bytes")){

表示该行已被抓取,但未分配给变量。结果立即测试了startsWith,但是你再次调用nextLine,然后得到下一行:

   String line = scanner.nextLine ();      

这是第二行。