您好我有一个包含跟踪路由和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
答案 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 ();
这是第二行。