我对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+","");