如何从缓冲区读取并存储为int和float变量

时间:2015-03-31 03:41:51

标签: java

我有一个给定格式的输入流,用arduino编程软件编码。我使用Netbeans + JDK从串口读取。

左腿

时间(毫秒):14448
加速度计:-1.38,2.2,1.3
陀螺仪:1.0,-0.9,1.2
磁强计:-2,1,-1.2

我需要编写一个算法来计算步数,所以我只需从上面的输入流中提取加速度计(x,y,z)读数。下面给出的是代码。

while (inputStream.available() > 0) {
    //int numBytes = inputStream.read(readBuffer);
    char buffer = (char)inputStream.read();
    this.bufferRx += buffer;
    System.out.print(buffer);
}

我该怎么做才能从字符串缓冲区获取时间和加速度计x,y,z值并将其存储为int和float值?

2 个答案:

答案 0 :(得分:1)

普通老java:

    BufferedReader br = new BufferedReader(new InputStreamReader(input, "ascii"));

    for (String line; null != (line = br.readLine()); )
    {
        if (line.startsWith("Accelerometer:"))
        {
            String[] split = line.split("[:,]");
            float x = Float.parseFloat(split[1]);
            float y = Float.parseFloat(split[2]);
            float z = Float.parseFloat(split[3]);
            // do somehting with the data.
            System.out.printf("%f,%f,%f\r\n",x,y,z);
        }
    }

玩java 8:

    Iterator<float[]> iterator = 
        new BufferedReader(new InputStreamReader(input, "ascii"))
            .lines()
            .filter(s -> s.startsWith("Accelerometer:"))
            .map(s -> s.split("[:,]"))
            .map(p -> new float[]{
                    Float.parseFloat(p[1]),
                    Float.parseFloat(p[2]),
                    Float.parseFloat(p[3]),
            }).iterator();

    while (iterator.hasNext())
    {
        float[] p = iterator.next();
        System.out.printf("%f,%f,%f\r\n", p[0], p[1], p[2]);
    }

答案 1 :(得分:0)

您需要使用RegEx或简单的String#split来拆分数据(假设它是传递的字符串),然后将各个String部分转换为它们各自的值(Integer.parseInt等)

但是我个人会修改你的Arduino代码以输出更多的机器可读数据(XML,JSON,...),因为坦白说这不是机器通信的方式。

相关问题