Java 从串行端口对数据线进行排序
我有一个通过串口发送一串数据的程序 我希望将数据字符串排序到不同的数组中,以便显示它们或计算数字的平均值 数字之间用逗号分隔。第一个数字始终为0,不使用,与*之后的数字相同。 下一个数字定义逗号后的下一个数字 #0, 1,5.430, 4,-55.3, 5,6.60, 6,151.0, 51,5.500*16 #0, 1,5.440, 51,5.400*22 #0, 1,5.480, 4,-55.0, 5,6.50, 6,151.0*37 #0, 1,5.490, 4,-53.7, 5,6.70, 51,5.500*02 #0, 1,5.430, 4,-55.3, 5,6.60, 6,151.0, 51,5.500*16 #0, 1,5.440, 51,5.400*22 #0, 1,5.480, 4,-55.0, 5,6.50, 6,151.0*37 #0, 1,5.490, 4,-53.7, 5,6.70, 51,5.500*02 由于无法插入图片,我添加了[TAB]以显示不同的组不同的组,并添加了[TAB] 这些程序并不总是发送相同长度的行 数组“1”包含数字“5.430” 数组“4”包含数字“-55.3” 数组“5”包含数字“6.60”Java 从串行端口对数据线进行排序,java,Java,我有一个通过串口发送一串数据的程序 我希望将数据字符串排序到不同的数组中,以便显示它们或计算数字的平均值 数字之间用逗号分隔。第一个数字始终为0,不使用,与*之后的数字相同。 下一个数字定义逗号后的下一个数字 #0, 1,5.430, 4,-55.3, 5,6.60, 6,151.0, 51,5.500*16 #0, 1,5.440, 51,5.400*22 #0, 1,5.480, 4,-55.0, 5,6.50,
依此类推。假设您已经通过串行端口完成了整个通信,并且第二行是有效的数据集,我将使用
扫描仪将您的串行流包装起来,并将其结构如下:
String[] arrayAndValue;
int arrayToken;
double arrayValue;
Scanner serScanner = new Scanner(myInputStream);
serScanner.useDelimiter("[\\p{JavaWhiteSpace}+||\*dd]");
While(serScanner.hasNext()) {
scannedItem = serScanner.nextString;
arrayAndValue=scannedItem.split(",");
arrayToken =Integer.parseInt(arrayAndValue[0]);
arrayValue =Double.parseDouble(arrayAndValue[1];
//insert a switch statement here,
//based on the different values arrayToken could have
}
我所做的是使用扫描器
类将myInputStream
解析为成对的数组标记和值,arrayToken
和arrayValue
分别作为字符串
,然后使用、
或*
模式将该字符串拆分为两个数字
这将产生一个长度为3的字符串数组,第一个数组包含arrayToken
,第二个数组包含arrayValue
,第三个数组是空字符串(由于后面的逗号而创建)
然后使用Integer.parseInt
和Double.parseDouble
调用来转换它们,然后将它们添加到switch
语句中的相应数组中。
如果您不知道要接收的每种类型的确切数量,我建议您将项目输入到ArrayLists
而不是Arrays
您的意思是每个索引(1、4、5、6和51)都有一个数组吗?每行上的列是否总是用逗号和制表符分隔?字符串不是用制表符分隔的。我需要将1、4、5、6和51之后的数字放入不同的数组,以便能够在正确的位置显示它们。我可能需要修复用作分隔符的正则表达式。如果我有点生疏,请建议编辑。这似乎是一个很好的解决方案。我想我应该用HashMap来获取数据。ArrayList是个不错的选择。@flesk是的。Hashmap绝对是更好的选择。我通常创建自己的记录对象并将其放入arrayList,但在这里hashmap绝对是正确的选择。