Java 如何选择字符串中的最后一个浮点值

Java 如何选择字符串中的最后一个浮点值,java,regex,Java,Regex,我有一个字符串,例如: “您好,我不想选择123.12,但890.12如何选择” 从上面的字符串中,我想选择“890.12”,我已经尝试了$。 对于“890.12”,它应该是最后一个,但我在“890.12”之后得到了一些单词。您可以通过一个正则表达式匹配找到它,但为了保持简单易读,我建议如下循环: Matcher m = Pattern.compile("\\d+\\.\\d+").matcher(string); String value = null; while(m.find()) {

我有一个字符串,例如:

“您好,我不想选择123.12,但890.12如何选择”


从上面的字符串中,我想选择“890.12”,我已经尝试了$。 对于“890.12”,它应该是最后一个,但我在“890.12”之后得到了一些单词。

您可以通过一个正则表达式匹配找到它,但为了保持简单易读,我建议如下循环:

Matcher m = Pattern.compile("\\d+\\.\\d+").matcher(string);
String value = null;
while(m.find()) {
    value = m.group();
}

如果值为null,则找不到模式,否则这是模式的最后一次出现。

Per Huss已经给出了一个非常可读的答案。正如他所提到的,也可以只进行一次匹配,而不进行循环:

private static String findLastDecimal(String string)
{
    Matcher m = Pattern.compile("(\\d+\\.\\d+)(?!.*\\d+\\.\\d+)").matcher(string);
    if (m.find())
    {
        return m.group(1);
    }
    return null;
}

这里的正则表达式查找后面没有另一个十进制数的十进制数。如果最后一个“正确”的小数点后有整数或类似于
.123
的东西,它也可以工作。

提示:最后一个数字后面的子字符串中没有数字。谢谢@malte hartwig,虽然我必须添加,但它工作了吗?在小数点前面。因为一段时间后该值将是整数。