假设我收到一个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解决此问题。
答案 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);
答案 2 :(得分:0)
使用String的split方法:
Arrays.asList(line.trim().split(",")).stream.map(w -> w.split("=")[1].trim())...