如何用匹配器从字符串中拉出双倍
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。
我正在尝试解析字符串中的双精度值。我有代码:
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。