您好我是编程新手,需要为我的学校项目提取数据。数据来自Arduino设备,该设备发送的数据看起来像这样。
<call_sign>IVV-HAM</call_sign>
<mission_call>ARP</mission_call>
<absolute_time>13:13:13</absolute_time>
<elapsed_time>43</elapsed_time>
<imu_accel_x>240</imu_accel_x>
<imu_accel_y>196</imu_accel_y>
<imu_accel_z>62</imu_accel_z>
<imu_gyro_x>599</imu_gyro_x>
<imu_gyro_y>1013</imu_gyro_y>
<imu_gyro_z>215</imu_gyro_z>
<imu_mag_x>402</imu_mag_x>
<imu_mag_y>495</imu_mag_y>
<imu_mag_z>447</imu_mag_z>
<imu_temp>453</imu_temp>
我需要摆脱前三行然后发送剩下的代码来绘制。我试图Delimit和拆分尖括号但我知道怎么做似乎工作。 任何帮助意见或建议,我可以找到答案(我已经在这里看了一天)将不胜感激,谢谢。
public void run(){
//create a new Scanner and connect it to the Serial Port
input = new Scanner(connectedPort.getInputStream());
//HERE I tried to use input.useDelimiter("></")
// I also tried to split by creating a string.split but
// it did not work either.
//loop indefinitely until you get data from the Serial Port
while(input.hasNextLine()){
//get line of text from serial port
String line = input.nextLine();
//dump the raw data to the output text area
//taRawOutput.append(Integer.toString(number)+'\n');
textArea_RawData.append(line+"\n");
}//end of loop
//close the scanner object reading from the serial port
input.close();
}//end of methd run()
};//end of inner class definition
//start the thread that was just defined running
thread.start();
}catch(IOException e){
JOptionPane.showMessageDialog(this, e.getMessage());
}//end of catch block
}
我尝试编辑问题以显示我的所作所为。
答案 0 :(得分:1)
您需要在开放括号之前拆分,而不是在它后跟斜杠时拆分。而你需要拆分才能消耗支架。所有这一切都可以通过展望完成。
试试这个:
scanner.useDelimiter("(?=<[^/])");
然后,每次拨打scanner.next()
时,您都会阅读整个标签。
正则表达式意味着“以下字符是<
然后是一个不是斜杠的字符”并且它不会消耗任何输入(匹配是零长度,实际上之间< / em> characters)
答案 1 :(得分:0)
我决定放弃分隔并使用带有&#34; indexOf的矢量(&#34;&gt;&#34;)+ 1,lastIndexOf(&#34;&lt;&#34;)&# 34;我知道它已经过时但它适用于我的目的。它包含我需要的数据,并可以发送到我需要的不同图表。 感谢您的帮助,但我很感激。