我的字符串格式与Java程序中的字符串类似。我需要拿出号码。解析Java中的字符串
Host is up (0.0020s latency).
我需要“(”和“S”字符之间的数。例如,我需要的0.0020在这个例子。
我的字符串格式与Java程序中的字符串类似。我需要拿出号码。解析Java中的字符串
Host is up (0.0020s latency).
我需要“(”和“S”字符之间的数。例如,我需要的0.0020在这个例子。
这取决于你如何“类似”的意思。您可以使用正则表达式:
import java.math.BigDecimal;
import java.util.regex.*;
public class Test {
public static void main(String args[]) throws Exception {
Pattern pattern = Pattern.compile("[^(]*\\(([0-9]*\\.[0-9]*)s");
String text = "Host is up (0.0020s latency).";
Matcher match = pattern.matcher(text);
if (match.lookingAt())
{
String group = match.group(1);
System.out.println("Before parsing: " + group);
BigDecimal value = new BigDecimal(group);
System.out.println("Parsed: " + value);
}
else
{
System.out.println("No match");
}
}
}
当然,您希望如何使您的模式具体取决于您。这只能检查数字,一个点,然后数字在开头括号之后和s
之前。您可能需要加以改进,使点可选等
听起来像对正则表达式的情况。
你想匹配的十进制数字,然后分析那场比赛:
Float matchedValue;
Pattern pattern = Pattern.compile("\\d*\\.\\d+");
Matcher matcher = pattern.matcher(yourString);
boolean isfound = matcher.find();
if (isfound) {
matchedValue = Float.valueOf(matcher.group(0));
}
如果你相信它会永远是第一号哟你可以使用正则表达式\d+\.\d+
(但请注意,反斜杠需要在Java字符串中转义)。
试试这个代码:
String input = "Host is up (0.0020s latency).";
Pattern pattern = Pattern.compile("\\d+\\.\\d+");
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
System.out.println(matcher.group());
}
看到它联机工作:ideone
你也可以包括一些正则表达式周围的人物,以减少匹配错号码的风险。要做到完全按照您的要求的问题(即(
和s
之间的匹配)使用正则表达式:
\((\d+\.\d+)s
看到它联机工作:ideone
这里是一种无正则表达式
String str = "Host is up (0.0020s latency).";
str = str.substring(str.indexOf('(')+1, str.indexOf("s l"));
System.out.println(str);
这是假设“相似”,字符串将以这种格式。 –
这是从简单到非常复杂的建设正则表达式一个伟大的网站。你选择语言和繁荣。
使用在这种情况下,正则表达式当然是最好的解决办法,但在许多情况下,简单的你也可以使用类似:
String value = myString.subString(myString.indexOf("("), myString.lastIndexOf("s"))
双numericValue = Double.parseDouble(值);
这不是推荐的,因为myString中的文本可以更改。
我在Perl中做了一个小正则表达式。但是,我不知道如何在Java中使用它。 –
我更新了我的内容,但是请记住float有一些精度问题,所以如果需要精确度,您可能会想用“BigDecimal”来代替,如Jon Skeet的示例所示。此外,我的多重匹配不是防弹的,等等。 – doctorless
如果没有找到数字,你的模式将匹配一个空字符串(或一个单一的'。'),导致Float.valueOf(...)'抛出异常。 –