2016-09-19 97 views
0
public class PortReader implements SerialPortEventListener { 
    @Override 
    public void serialEvent(SerialPortEvent event) { 

     while(event.isRXCHAR() && event.getEventValue() > 0) { 
      try { 
       String receivedData = serialPort.readString(event.getEventValue()); 
       tempData = tempData.concat(receivedData); 
       System.out.println(tempData); 
      } 
      catch (SerialPortException ex) { 
       System.out.println("Error in receiving response from port: " + ex); 
      } 
     } 
    } 
} 

我想从变量tempData中删除字符串。如果我把tempData = "";放在println的末尾。我不知道为什么?有人能帮我解决这个问题吗?如果我不从变量中删除字符串,几分钟后我的CPU使用率就会过高。我正在从GPS天线接收字符串,我正在从中获取NMEA。如何在获取后从变量中删除字符串?

+0

你为什么串接字符串?你真的打算每次都打印一遍,而不仅仅是当前/最后一个事件吗? – Robert

+0

如果我没有连接字符串,输出就像这样。 $ 摹 P 摹 摹 A等... 而如果IM相连来。像这样的输出.. $ GPGGA等等。 因为我想从使用GPS天线的NMEA代码中获取时间。先生,有没有其他办法? – CeciliA

+0

P.S我说的第一个输出就像每个字符打印然后再一行。 – CeciliA

回答

0

使用StringBuffer或StringBuilder做这样的活动,在String上做这件事将会是一个代价高昂的操作。 此外它看起来你想从字符串中删除空格追加到的StringBuffer

公共类PortReader之前使用该装饰()函数实现SerialPortEventListener {

StringBuffer sb = StringBuffer(); 

@Override 
public void serialEvent(SerialPortEvent event) { 
    while (event.isRXCHAR() && event.getEventValue() > 0) { 
     try { 
      String receivedData = serialPort.readString(event 
        .getEventValue()); 
      // check if string is not null before trim 
      sb.append(receivedData == null ? "" : receivedData.trim()); 
      sb.append(","); 
      //just print the receivedData in plac of whle sb again and again 
      System.out.println(receivedData); 
     } catch (SerialPortException ex) { 
      System.out.println("Error in receiving response from port: " 
        + ex); 
     } 
    } 
    //check if the comma is the last index if so remove that 
    String tmpData = sb.toString(); 
    tmpData = tmpData.replaceAll(", $", ""); 
    //print the entire data now 
    System.out.println(tmpData); 

} 

}