字符串操作:在java中从字符串中提取数字?
我希望能够从字符串中提取某些东西,例如数字,从速度和准确性方面来说,执行此操作最有效的方法是什么 例如,如果我有一个文件:PingFile.txt,其中的内容只是一个服务器的ping,就像:字符串操作:在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
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的正则表达式模式,这是一个示例。