我有一个程序可以通过串行端口发送一串数据。
我想将数据字符串排序为不同的数组,以便可以显示它们或计算数字的平均值。
数字用逗号分隔。第一个数字始终为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”
等等。
最佳答案
假设您已经完成了通过串行端口进行的全部通信,并且第二行是有效的数据集,我将使用Scanner
包装您的串行流,并按如下方式进行结构化:
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
和String
,然后使用,
将该字符串拆分*
的模式,后跟两位数字。这将导致一个长度为3的String数组,第一个数组包含
arrayToken
,第二个数组包含arrayValue
,第三个数组为空字符串(由于结尾逗号而创建)。然后,使用
Integer.parseInt
和Double.parseDouble
调用翻译它们,然后将它们添加到switch
语句中的适当数组中。如果您不知道每种类型的确切编号,我建议您将这些项目输入
ArrayLists
而不是Arrays
。