我试图解析字符串中的双精度数。我有代码:
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的正则表达式,它似乎适用于他们。我也尝试了一些其他的正则表达式,他们都犯了同样的错误。我在这里错过了什么吗?
答案 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