我正在尝试从此字符串中获取当前金额,但是我只想要双倍。

String total = "Your current total is +$35.25";


我已经尝试过此代码,但是$表示行尾并且它总是返回0.00,所以我怎么只能得到35.25

double amount = getNumberFromString("(\\$\\d\\d.?\\d?\\d?)\\s?[^Xx]?", total);

public double getNumberFromString(String value, final String s)
{
    double n = 0.0;
    Matcher M = Pattern.compile(value).matcher(s);

    while (((Matcher)M).find())
    {
        try {
            n = Double.parseDouble(((Matcher)M).group(1));
            //Log.e(TAG, "Number is : " + ((Matcher)M).group(1));
        }
        catch (Exception ex) {
            n = 0.0;
        }
    }

    return n;
}

最佳答案

您的代码引发异常,因为您的正则表达式正在捕获组#1中的非数字$。还要注意,您的代码正在执行不必要的强制转换,可以避免。

以下代码应为您工作:

String total = "Your current total is +$35.25";

double amount = getNumberFromString("\\$(\\d+(?:\\.\\d+)?)", total);

public double getNumberFromString(String value, final String s) {
    double n = 0.0;
    Matcher m = Pattern.compile(value).matcher(s);

    while (m.find()) {
        try {
            n = Double.parseDouble(m.group(1));
        }
        catch (Exception ex) {
            n = 0.0;
        }
    }
    return n;
}

07-24 09:49
查看更多