Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
字符串操作:在java中从字符串中提取数字?_Java_String_Ping - Fatal编程技术网

字符串操作:在java中从字符串中提取数字?

字符串操作:在java中从字符串中提取数字?,java,string,ping,Java,String,Ping,我希望能够从字符串中提取某些东西,例如数字,从速度和准确性方面来说,执行此操作最有效的方法是什么 例如,如果我有一个文件: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

我希望能够从字符串中提取某些东西,例如数字,从速度和准确性方面来说,执行此操作最有效的方法是什么

例如,如果我有一个文件: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等),然后解析它们,则使用float或double而不是字符串。我该怎么做

谢谢


Euden

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

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

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

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

然后执行子字符串,如“time=5.134”。子字符串(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);
}

有很多方法可以做到这一点,比如

  • 使用Pattern类,但是对于您想要的内容来说,这可能是非常重要的
  • 使用Scanner类,尽管这可能仍然超出了您的需要
  • 使用string.split(“”[6]和Float.valueOf()(或Double.valueOf())

我相信还有其他方法可以做到这一点。

您已经开始编写代码了吗?您尝试过什么吗?定义“最佳方法”。您是否在寻找速度、可读性或其他方面?请使用
扫描仪
缓冲文件阅读器
打开您的文件。逐行阅读并使用正则表达式搜索所需的模式。您可以在internet上找到IP的正则表达式模式,这是一个示例。