0

我希望能够从数字等字符串中提取某些内容,在速度和准确性方面执行此操作的最有效方法是什么?

因此,例如,如果我有一个文件:PingFile.txt,其内容只是通过管道输入的服务器的 ping,例如:

PING google.com (74.125.224.46): 56 data bytes
64 bytes from 74.125.224.46: icmp_seq=0 ttl=45 time=5.134 ms
64 bytes from 74.125.224.46: icmp_seq=1 ttl=45 time=5.102 ms
64 bytes from 74.125.224.46: icmp_seq=2 ttl=45 time=5.062 ms
64 bytes from 74.125.224.46: icmp_seq=3 ttl=45 time=4.988 ms
64 bytes from 74.125.224.46: icmp_seq=4 ttl=45 time=5.368 ms
64 bytes from 74.125.224.46: icmp_seq=5 ttl=45 time=5.012 ms

如果我只想提取时间值(5.134、5.102、5.062 等),然后解析它们是浮点数或双精度数,而不是它们的字符串。我该怎么做?

谢谢,

欧登

4

3 回答 3

1

我认为您可以使用regex="time=[0-9\\.]+"来查找字符串time=5.134time=5.102

然后做一个子字符串"time=5.134".substring(5)来获取数字部分。

下面的代码示例:

String timeString = "64 bytes from 74.125.224.46: icmp_seq=0 ttl=45 time=5.134 ms";
Pattern timePattern = Pattern.compile("time=[0-9\\.]+");
Matcher timeMatcher = timePattern.matcher(timeString);
if(timeMatcher.find()){
    String timeS = timeMatcher.group(0);
    System.out.println(timeS);
    String time = timeS.substring(5);
    System.out.println(time);
    double t = Double.parseDouble(time);
    System.out.println(t);
}
于 2012-10-23T18:45:09.793 回答
0

您可以为每一行执行此操作:

String[] tokens = line.split(" ");
String timeString = tokens[tokens.length-2];
float time = Float.parseFloat(timeString);

如果需要,您可以使用 BufferedReader 逐行读取。

于 2012-10-23T18:44:08.827 回答
0

有很多方法可以做到,比如...

  • 使用 Pattern 类,但这对于你想要的可能是非常重量级的
  • 使用 Scanner 类,尽管这可能仍然超出您的需要
  • 使用 string.split(" ")[6] 和 Float.valueOf()(或 Double.valueOf())

我敢肯定还有其他方法可以做到这一点。

于 2012-10-23T18:46:08.353 回答