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

时间:2015-04-22 04:38:45

标签: java regex 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的正则表达式,它似乎适用于他们。我也尝试了一些其他的正则表达式,他们都犯了同样的错误。我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:2)

这不是你的正则表达式的问题,而是你如何使用Matcher类。你需要先调用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

答案 1 :(得分:0)

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