我有一个程序通过串口发送一串数据。
我想将数据字符串排序到不同的数组中,以便我可以显示它们或计算数字的平均值。
数字以逗号分隔。第一个数字始终为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
由于我无法插入图片,我添加了[TAB]以显示不同的组不同的组,并添加了[TAB]
程序并不总是发送相同长度的行。
数组“1”包含数字“5.430”
数组“4”包含数字“-55.3”
数组“5”包含数字“6.60”
等等。
答案 0 :(得分:1)
假设你已经通过串口完成了整个通信,并且第二行是一个有效的数据集,我会用Scanner
包装你的串行流,并按原样构造它: / p>
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
}
我所做的是使用Scanner
类将myInputStream
分别解析为数组标记和值,arrayToken
和arrayValue
分别为{{1}然后,使用String
或,
后跟两位数的模式拆分该字符串。
这将导致长度为3的String数组,第一个包含*
,第二个包含arrayToken
,第三个是空字符串(由于尾随逗号而创建)。
然后,您使用arrayValue
和Integer.parseInt
调用来翻译它们,然后将它们添加到Double.parseDouble
语句中的相应数组中。
如果您不知道您将接收的每种类型的确切数量,我建议您将这些项目输入switch
而不是ArrayLists
。