我在Java程序中使用了与下面类似的字符串。我需要把号码拿出来。
Host is up (0.0020s latency).
我需要'('和's'字符之间的数字。例如,在这个例子中我需要 0.0020 。
答案 0 :(得分:3)
听起来像正则表达式。
您需要匹配小数,然后解析匹配:
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));
}
答案 1 :(得分:3)
如果您确定它始终是第一个数字,您可以使用常规表达式\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
答案 2 :(得分:2)
这取决于你的意思是“相似”。您可以使用正则表达式:
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
之前的数字。您可能需要对其进行优化以使点可选等。
答案 3 :(得分:1)
这是一个很好的网站,用于构建从简单到非常复杂的正则表达式。你选择语言和繁荣。
答案 4 :(得分:0)
这是一种没有正则表达式的方法
String str = "Host is up (0.0020s latency).";
str = str.substring(str.indexOf('(')+1, str.indexOf("s l"));
System.out.println(str);
答案 5 :(得分:0)
当然,在这种情况下使用正则表达式是最佳解决方案,但在许多简单的情况下,您也可以使用以下内容:
String value = myString.subString(myString.indexOf("("), myString.lastIndexOf("s"))
double numericValue = Double.parseDouble(value);
不建议这样做,因为myString中的文本可能会发生变化。