从包含3个浮点的传感器中解析一个字符串

时间:2014-08-20 07:25:23

标签: java sensor temperature

我正在尝试解析温度传感器的信息。 传感器发送格式为的字符串:

Temp: 1   388  2   358  3   200?    
Temp: 1   388  2   200?  3   200?  

(First String包含有效的通道2样本和通道3断开连接,第二个String包含通道2和3断开连接。)

我需要解析那些没有点的float的“dat”,我不能使用String.split(),因为如果传感器没有检测到任何东西,它会添加一个'?'到“dat”的结尾。 输出应该是:

Temp[0]= 38.8
Temp[1]= 35.8
Temp[2]= 20.0

另外我需要解析'?'说一个它断开的频道。

3 个答案:

答案 0 :(得分:1)

我尝试使用split()来解决这个问题,并且没有看到你说的任何错误。

public static void parseData(String data) {
    String[] args = data.split("\\s+");
    for (int i=2; i<7; i+=2) {
        if (args[i].charAt(args[i].length() - 1) == '?') {
            args[i] = args[i].substring(0, args[i].length() - 1);
        }
        double val = Double.parseDouble(args[i]) / 10;
        System.out.println("Temp[" + (i-1)/2 + "]= " + val);
    }
}

答案 1 :(得分:0)

可能最简单的方法是使用String.split("\\s")这将提供一个字符串数组。例如:

 Temp: 1   388  2   358  3   200?  => {"Temp:", "1", "388", "2", "358", "3", "200?"}

知道第一个温度应该是第3列,你可以从那里开始处理。要获取数值,您可以使用Integer.parse(...)。对于花车你可以除以10.你可以检查它是否有尾随&#34;?&#34;与String.endsWith(...)。对于更复杂的处理,您可以使用不同的正则表达式。有关java中正则表达式的更多信息herehere

您如何收到您的意见?你从哪里读到的?一个好的简单解决方案可能是scanner

答案 2 :(得分:0)

你走了:

Scanner line = new Scanner(sensorStream);
while (line.hasNext()) {
    line.next(); // Temp:
    line.next(); // #

    int firstReading = line.nextInt(); // 388
    float realFirstReading = firstReading/10.0; // 38.8

    line.next(); // #
    int secondReading = line.nextInt(); // 358
    float realSecondReading = secondReading/10.0 // 35.8

    line.next(); // #
    int thirdReading = line.nextInt(); // 200
    float realThirdReading = thirdReading / 10.0; // 20.0
    // do what you will with it
}

如果您需要进一步的帮助,请发表评论......