如何从String中提取和分离double值?

时间:2018-06-19 09:45:46

标签: java string android-studio double extract

假设我收到一个java String message =“a = 5.31,b = 2.004,c = 3.1230”,它在一个String消息中发送我想要的3个变量。

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

我已经阅读了使用正则表达式从字符串消息中提取数字的线程,但是我找不到在将数据传递给匹配器之后将结果数字分开的方法。

我可以为此导入一个库吗?

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

3 个答案:

答案 0 :(得分:4)

脆弱的草案解决方案可能涉及模式/匹配器与迭代和反向引用的组合,以及来自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

注意

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

答案 1 :(得分:2)

使用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"

答案 2 :(得分:0)

使用String的split方法:

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