如何用匹配器从字符串中拉出双倍

How to pull double out of string with matcher

我正在尝试解析字符串中的双精度值。我有代码:

Pattern p = Pattern.compile("-?\d+(\.\d+)?");
Matcher m = p.matcher("reciproc(2.00000000000)");
System.out.println(Double.parseDouble(m.group())); 

此代码抛出 java.lang.IllegalStateException。我希望输出为 2.00000000000。我从 Java: Regex for Parsing Positive and Negative Doubles 那里得到了正则表达式,它似乎对他们有用。我也尝试了其他一些正则表达式,它们都抛出了同样的错误。我在这里遗漏了什么吗?

p.matcher("2.000000000000");

您的模式应与 Pattern.compile()

中提供的正则表达式匹配

有关正则表达式和模式的更多信息:

https://docs.oracle.com/javase/tutorial/essential/regex/ https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html

这不是您的正则表达式的问题,而是您如何使用匹配器的问题 class。您需要先调用 find()。

这应该有效:

    Pattern p = Pattern.compile("-?\d+(\.\d+)?");
    String text = "reciproc(2.00000000000)";
    Matcher m = p.matcher(text);
    if(m.find())
    {
        System.out.println(Double.parseDouble(text.substring(m.start(), m.end())));
    }

或者:

    Pattern p = Pattern.compile("-?\d+(\.\d+)?");
    Matcher m = p.matcher("reciproc(2.00000000000)");
    if(m.find())
    {
        System.out.println(Double.parseDouble(m.group()));
    }

有关详细信息,请参阅 the docs