我正在尝试解析温度传感器的信息。 传感器发送格式为的字符串:
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
另外我需要解析'?'说一个它断开的频道。
答案 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中正则表达式的更多信息here和here。
您如何收到您的意见?你从哪里读到的?一个好的简单解决方案可能是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
}
如果您需要进一步的帮助,请发表评论......