如何解析 Ping 请求(字符串)的 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("Errorn");
        e.printStackTrace();
    }
    return str;
}

输出:

time = 43

但是,我真的不明白这里的所有内容,因为它是来自互联网的脚本。因为我只是在响应时休息,所以我想解析它并将其转换为整数。

在我看来有两种可能性

  • 修改 ping 命令以仅返回时间
  • 从字符串中解析超时的整数

从来没有做过那种东西,所以我想问问你们能不能帮我。 :)

您可以通过以下几种方式执行此操作:

1

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

阿拉伯数字

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);

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

最新更新