Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java拆分不一致_Java_Arraylist_Nmea - Fatal编程技术网

Java拆分不一致

Java拆分不一致,java,arraylist,nmea,Java,Arraylist,Nmea,我在输出下面有以下代码 我的问题是分割功能工作不正确/不一致。 我想在每个“$”上拆分。 原因是我想解析GGA和RMC数据。 在任何人花费太多时间之前,这是正确的方法吗? 我的步骤: 读取GPS数据 将语句类型(GGA、RMC)存储在仅存储最新数据的变量中 解析这些变量并传递给程序和数据库 [ $GPGSV,,,,,,,,,*43 $GPRMC,055106.000,A,N,W,0.00,61.40,A*4D] [ $GPVTG、、、、、、T、、M、、、K、A*3E $GPGGA,055107.

我在输出下面有以下代码

我的问题是分割功能工作不正确/不一致。 我想在每个“$”上拆分。 原因是我想解析GGA和RMC数据。 在任何人花费太多时间之前,这是正确的方法吗? 我的步骤: 读取GPS数据 将语句类型(GGA、RMC)存储在仅存储最新数据的变量中 解析这些变量并传递给程序和数据库

[ $GPGSV,,,,,,,,,*43

$GPRMC,055106.000,A,N,W,0.00,61.40,A*4D]

[ $GPVTG、、、、、、T、、M、、、K、A*3E

$GPGGA,055107.000,N,W,M,-33.3,M,0000*6T

$GPGLL,N,W,055107.000,A,A*44]

[

$GPRMC,055107.000,A,,N,,W,0.00,,,,,A*4F

$GPVTG、、、、、T、、M、0.00、、0.0、、A*3E]

[

$GPGGA,055108.000,3,北,西,1,09,0.9,M,0000*62]

import jssc.SerialPort; 
import jssc.SerialPortEvent; 
import jssc.SerialPortEventListener; import jssc.SerialPortException;
import java.util.Arrays;
//import java.awt.List;
//import java.util.Base64;
//import java.io.BufferedReader;
//import java.io.ByteArrayInputStream;
//import java.io.InputStream;
//import java.io.InputStreamReader;
//import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.io.IOException;
import java.lang.*;
//import static java.util.Arrays.asList;
//import java.util.List;
//import java.util.stream.Collectors;
//import org.apache.commons.lang3.StringUtils;


public class test {
static List<String> datat = new ArrayList<String>();
static SerialPort serialPort;

public static void main(String[] args) {
    serialPort = new SerialPort("COM1"); 
    try {
        serialPort.openPort();//Open ports
        serialPort.setParams(4800, 8, 1, 0);//Set params
      int mask = SerialPort.MASK_RXCHAR + SerialPort.MASK_CTS + SerialPort.MASK_DSR;//Prepare mask
       serialPort.setEventsMask(mask);//Set mask
       serialPort.addEventListener(new SerialPortReader());//Add SerialPortEventListener


    }
    catch (SerialPortException ex) {
        System.out.println(ex);
    }
}

/*
 * In this class must implement the method serialEvent, through it we learn about 
 * events that happened to our port. But we will not report on all events but only 
 * those that we put in the mask. In this case the arrival of the data and change the 
 * status lines CTS and DSR
 */

static class SerialPortReader implements SerialPortEventListener {

    public void serialEvent(SerialPortEvent event) {
    //   if(event.isRXCHAR()){//If data is available
      //     if(event.getEventValue() < 577){//Check bytes count in the input buffer
                //Read data, if 10 bytes available 

                try {
                    String getdata =  serialPort.readString(event.getEventValue()+1);
                String[] parts= getdata.split("$");

                if(!datat.isEmpty()){
                    datat.set(datat.size() - 1, datat.get(datat.size() - 1) + parts[0]);
                }
                //data.set(data.size() - 1, data.get(data.size() - 1) + parts[0]);
                for (int i=1; i<parts.length; i++) {
                    datat.add(parts[i]);
               //     System.out.println(Arrays.toString(parts));
                }

               String[] data2 = datat.toArray(new String[0]);

               for(String s : data2) 
               {

                   data2 = s.split("$");

                   List<String> data3 = Arrays.asList(data2);
                 //  int testing = data3.size();
                   System.out.println(data3);


               }




                }
                catch (SerialPortException ex) {                  
             }

       }        
}


}
导入jssc.SerialPort;
导入jssc.SerialPortEvent;
导入jssc.SerialPortEventListener;导入jssc.SerialPortException;
导入java.util.array;
//导入java.awt.List;
//导入java.util.Base64;
//导入java.io.BufferedReader;
//导入java.io.ByteArrayInputStream;
//导入java.io.InputStream;
//导入java.io.InputStreamReader;
//导入java.io.UnsupportedEncodingException;
导入java.util.ArrayList;
导入java.util.List;
导入java.io.IOException;
导入java.lang.*;
//导入静态java.util.Arrays.asList;
//导入java.util.List;
//导入java.util.stream.collector;
//导入org.apache.commons.lang3.StringUtils;
公开课考试{
静态列表datat=newarraylist();
静态串口串口;
公共静态void main(字符串[]args){
serialPort=新的serialPort(“COM1”);
试一试{
serialPort.openPort();//打开端口
serialPort.setParams(4800,8,1,0);//Set params
int mask=SerialPort.mask\u RXCHAR+SerialPort.mask\u CTS+SerialPort.mask\u DSR;//准备mask
serialPort.setEventsMask(掩码);//设置掩码
serialPort.addEventListener(新的SerialPortReader());//添加SerialPortEventListener
}
捕获(SerialPortException例外){
系统输出打印项次(ex);
}
}
/*
*在这个类中必须实现方法serialEvent,通过它我们了解
*发生在我们港口上的事件。但我们不会报告所有事件,只会
*我们放在掩码中的那些。在这种情况下,数据的到达和
*状态行CTS和DSR
*/
静态类SerialPortReader实现SerialPortEventListener{
public void serialEvent(SerialPortEvent事件){
//if(event.isRXCHAR()){//if数据可用
//如果(event.getEventValue()<577){//检查输入缓冲区中的字节数
//读取数据(如果有10字节可用)
试一试{
String getdata=serialPort.readString(event.getEventValue()+1);
String[]parts=getdata.split($);
如果(!datat.isEmpty()){
datat.set(datat.size()-1,datat.get(datat.size()-1)+parts[0]);
}
//data.set(data.size()-1,data.get(data.size()-1)+parts[0]);

对于(int i=1;isplit函数采用正则表达式,而不是字符串,如果在正则表达式($)中使用特殊字符,则需要替换该字符

String s= "$........$...$....";
String[] data2= s.split("\\$");

split函数接受正则表达式,而不是字符串。如果在正则表达式($)中使用特殊字符,则需要替换该字符

String s= "$........$...$....";
String[] data2= s.split("\\$");

$是正则表达式中的一个特殊字符。我相信您需要模式\\$。请使用str.split(\\$);$是正则表达式中的一个特殊字符。我相信您需要模式\\$。请使用str.split(\\$);我试过了。工作不正常。它打印时没有我需要保留的$符号。s在每个字符之间。这就是拆分方法的工作原理,如果使用withespace进行拆分,结果将从结果数组中删除…你可以创建一个方法重新组合原始字符串。我试过了。工作不正常。它打印如果没有$符号,我需要在每个字符之间保留并打印.s,这就是split方法的工作原理,如果使用WiseSpace进行拆分,结果将从结果数组中删除…您可以创建一个重新组合原始字符串的方法