如何解析Ping请求(字符串)的Ping-Time(整数)?

时间:2014-04-03 18:11:54

标签: java android parsing process ping

我对Android编程很陌生,而且我对Java / Android编程没有经验。我想创建一个应用程序,它会ping用户输入的地址。

所以我找到了一个退出的好脚本,它对地址执行ICMP Ping请求并返回命令行的输出。 (实际上它只是Ping命令,它在一个进程中运行):

public String ping(String url){
    int count = 0;
    String str = "";
    try {
        Process process = Runtime.getRuntime().exec(
                "/system/bin/ping -c 1 " + url);
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                process.getInputStream()));
        int i;
        char[] buffer = new char[4096];
        StringBuffer output = new StringBuffer();
        while ((i = reader.read(buffer)) > 0)
            output.append(buffer, 0, i);
        reader.close();
        //int time = Integer.parseInt(output[10])
        // body.append(output.toString()+"\n");
        str = output.toString();
        str = str.substring(str.indexOf("time="), str.indexOf("ms"));
        //str = output.toString();
        // Log.d(TAG, str);

    } catch (IOException e) {
        // body.append("Error\n");
        e.printStackTrace();
    }
    return str;
}

输出:

time = 43

但是,我并不真正理解这里所做的一切,因为它是来自互联网的脚本。因为我只是对响应时间感兴趣,所以我想解析它并将其转换为整数。

在我看来,有两种可能性

  • 修改ping命令以仅返回时间
  • 解析String
  • 之外的整数

我从来没有和那种东西一起工作,所以我想问你们,如果你能帮助我的话。 :)

1 个答案:

答案 0 :(得分:4)

您可以通过以下几种方式实现:

1

str = str.substring(str.indexOf("=") + 1, str.indexOf("ms")).trim();
int result = Integer.valueOf(str);

2

str = str.replace("time=", "").replace("ms", "").trim();
int result = Integer.valueOf(str);

3

Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(output.toString());
matcher.find();
String result = matcher.group();
int result = Integer.valueOf(str);

4

str = str.replaceAll("\\D+","");