我有一个程序可以通过串行端口发送一串数据。

我想将数据字符串排序为不同的数组,以便可以显示它们或计算数字的平均值。

数字用逗号分隔。第一个数字始终为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解析为成对的数组标记和值,分别作为arrayTokenarrayValueString,然后使用,将该字符串拆分*的模式,后跟两位数字。

这将导致一个长度为3的String数组,第一个数组包含arrayToken,第二个数组包含arrayValue,第三个数组为空字符串(由于结尾逗号而创建)。

然后,使用Integer.parseIntDouble.parseDouble调用翻译它们,然后将它们添加到switch语句中的适当数组中。
如果您不知道每种类型的确切编号,我建议您将这些项目输入ArrayLists而不是Arrays

10-02 04:36
查看更多