我想获得1长(时间标记)和3个浮出消息的有效载荷,我路过看起来像这样的字符串(忽略引号):Java正则表达式用逗号分隔的数字
"5737540811294,359.306580,7.948747,6.6707006621"
用这种方法
private static void processAnglesMsg(String s) {
final Pattern dataTFFFsplit = Pattern.compile("[+-]([0-9]+),"
+ "[+-]([0-9]*[.])?[0-9]+,"
+ "[+-]([0-9]*[.])?[0-9]+,"
+ "[+-]([0-9]*[.])?[0-9]+,");
Matcher data = dataTFFFsplit.matcher(s.trim());
if(data.matches()) {
Long time = Long.parseLong(data.group(1));
float yaw = Float.parseFloat(data.group(2));
float pitch = Float.parseFloat(data.group(3));
float roll = Float.parseFloat(data.group(4));
System.out.format("Angles - [%8d] Yaw: %08.3f Pitch: %08.3f Roll: %08.3f%n",time,yaw, pitch,roll);
} else {
if(debugLevel>=4) System.out.println("DEBUG processAnglesMsg: "+s);
}
}
我跟上到达调试代码:
DEBUG processAnglesMsg:5737540811294,359.306580,7.948747,6.6707006 621 *
所以它看起来像我的模式是不工作和data.matches()返回false,尽管很多搜索我看不出我做错了什么。我希望模式允许可选+或 - 即使我目前的数据不包含这一点。
好奇,为什么不直接使用s.trim.split( “”),然后执行'解析*'? – randominstanceOfLivingThing
你知不知道你可以使用'\ d'而不是'0-9' - 尽管你可能永远不会受到影响,但在怪异的语言环境下它更可靠。 – slim
@slim [docs](https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html)声明'\ d'是一个预定义的字符类, [0-9]'。本地化不应该是相关的。 – Mena