在Java中从字符串中获取Double

时间:2012-06-10 18:07:38

标签: java string parsing

我有一个文本(字符串),我只需要从中获取数字,我的意思是如果我有文字:

“我距离53.2公里”,我想得到“53.2”(不是532或53或2)

我在Extract digits from a string in Java中尝试了解决方案。它返回“532”。

任何人都有这个想法吗?

感谢名单

6 个答案:

答案 0 :(得分:9)

您可以直接使用nextDouble()hasNextDouble()方法的Scanner,如下所示:

        Scanner st = new Scanner("I'm 53.2 km away");
        while (!st.hasNextDouble())
        {
            st.next();
        }
        double value = st.nextDouble();
        System.out.println(value);

输出: 53.2

答案 1 :(得分:3)

这是一个很好的正则表达站点与测试人员:

http://gskinner.com/RegExr/

这很好\d+\.?\d+

答案 2 :(得分:3)

import java.util.regex.*;

class ExtractNumber
{
    public static void main(String[] args)
    {
        String str = "I'm 53.2 km away";
        String[] s = str.split(" ");
        Pattern p = Pattern.compile("(\\d)+\\.(\\d)+");
        double d;
        for(int i = 0; i< s.length; i++)
        {
            Matcher m = p.matcher(s[i]);
            if(m.find())
                d = Double.parseDouble(m.group());
        }
        System.out.println(d);
    }
}

答案 3 :(得分:1)

最简单的方法是使用正则表达式和replaceAll字符串方法。 E.g

String a = "2.56 Kms";

String b = a.replaceAll("\\^[0-9]+(\\.[0-9]{1,4})?$","");

Double c = Double.valueOf(b);

System.out.println(c);

答案 4 :(得分:0)

如果你确定你的数字是“单词”(空格分隔)并且不想使用RegExs,你可以解析它们......

String myString = "I'm 53.2 km away";
List<Double> doubles = new ArrayList<Double>();
for (String s : myString.split(" ")) {
    try {
        doubles.add(Double.valueOf(s));
    } catch (NumberFormatException e) {
    }
}

答案 5 :(得分:0)

我刚刚创建了一个方法getDoubleFromString。我认为这不是最佳解决方案,但效果很好!

public static double getDoubleFromString(String source) {
        if (TextUtils.isEmpty(source)) {
            return 0;
        }

        String number = "0";
        int length = source.length();

        boolean cutNumber = false;
        for (int i = 0; i < length; i++) {
            char c = source.charAt(i);
            if (cutNumber) {
                if (Character.isDigit(c) || c == '.' || c == ',') {
                    c = (c == ',' ? '.' : c);
                    number += c;
                } else {
                    cutNumber = false;
                    break;
                }
            } else {
                if (Character.isDigit(c)) {
                    cutNumber = true;
                    number += c;
                }
            }
        }
        return Double.parseDouble(number);
    }