如何从字符串中提取和分离双精度值?

How can I extract and separate double values from String?

假设我收到一条 java 字符串消息 = "a=5.31,b=2.004,c=3.1230",它在一条字符串消息中发送了我想要的 3 个变量。

如何提取a,b,c的准确值,然后让3个double OR字符串变量x,y,z分别保存a,b,c的值?最好,我希望它能够处理任意数量的小数位(或者至少最多 4 dp)。

我已经阅读了有关使用正则表达式从字符串消息中提取数字的帖子,但在通过匹配器传递结果数字后,我找不到一种方法来分隔结果数字。

是否有我可以为此导入的库?

我目前正在使用支持 API 21 及更高版本的 Android Studio 来解决这个问题。

使用String.split:

String message = "a=5.31,b=2.004,c=3.1230";
String[] kvpairs = message.split(",");
Double x = Double.valueOf(kvpairs[0].split("=")[1]);
Double y = Double.valueOf(kvpairs[1].split("=")[1]);
Double z = Double.valueOf(kvpairs[2].split("=")[1]);
System.out.println(z);

prints "3.123"

一个脆弱的草案解决方案可能涉及 pattern/matcher 与迭代和反向引用的组合,以及来自 Double 的解析实用程序 method

类似于:

String test = "a=5.31,b=2.004,c=3.1230";
//                          | [letter(s)]=
//                          |    | group 1: digits and dots
//                          |    | 
Pattern p = Pattern.compile("\w+=([\d.]+)");
Matcher m = p.matcher(test);
// iterating on findings
while (m.find()) {
    // back-reference
    String match = m.group(1);
    // trying to parse combination of digits and dots as double
    try {
        double d = Double.valueOf(match);
        System.out.printf("Found double: %f%n", d);
    }
    // handling non-parseable combinations of digits and dots
    catch (NumberFormatException nfe) {
        // TODO handle
        System.out.printf("Couldn't parse %s as double.%n", match);
    }
}

输出

Found double: 5.310000
Found double: 2.004000
Found double: 3.123000

备注

由于默认的 printf 表示,输出填充了额外的 0s。

使用字符串的拆分方法:

Arrays.asList(line.trim().split(",")).stream.map(w -> w.split("=")[1].trim())...