Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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_Arrays_Parsing_Scientific Notation - Fatal编程技术网

在数据结构中解析不同大小的数组-Java

在数据结构中解析不同大小的数组-Java,java,arrays,parsing,scientific-notation,Java,Arrays,Parsing,Scientific Notation,作为一名Java程序员新手,我在为我的个人项目分析数据时遇到了相当高的障碍。我有一条短信 具有33.5k数据点的文件,格式如下: PointNumber: 33530 Lat: 8.99167773897820e-001 Lon: 6.20173660875318e+000 Alt: 0.00000000000000e+000 NumberOfAccesses: 4 0

作为一名Java程序员新手,我在为我的个人项目分析数据时遇到了相当高的障碍。我有一条短信 具有33.5k数据点的文件,格式如下:

PointNumber:        33530  
Lat:                8.99167773897820e-001  
Lon:                6.20173660875318e+000  
Alt:                0.00000000000000e+000  
NumberOfAccesses:   4  
0    4.80784667215499e+003   4.80872732950073e+003  
0    1.05264215520092e+004   1.05273043378212e+004  
1    1.65167780853593e+004   1.65185840063538e+004  
1    6.52228387069902e+004   6.52246514228552e+004  
最后的行,即以0或1开头的行,对应于访问数行中的整数。我想通过 在访问次数超过1次的PointNumber的每个访问实例之后,归档并打印Lat、Lon和两个值

我不确定是从扫描器还是标记器开始,还是编译一个模式。哪种技术使仅存储有效的点编号更容易? 直觉告诉我解析文件,将相关值放入对象中:

PointNumber num1 = new PointNumber(lat, lon, accesses[]);

然后循环遍历对象,如果数组长度大于1,则打印对象的值。另一方面,最好忽略不符合要求的信息。这可以通过在解析时检查numberOfAccesss值然后跳转到下一个字符串来实现吗。startsWith(“PointNumber:”)如果该值,则可以在有输入要解析的情况下循环该值

// Assuming you have a scanner object named s and pointed to your file:

// PointNumber: 33530
int pointNumber = 0;
while(!s.next().equals("PointNumber:")) {
    pointNumber = s.nextInt();
}

// Lat: 8.99167773897820e-001
double lat = 0.0;
while(!s.next().equals("Lat:")) {
    lat = s.nextDouble();
}

// Lon: 6.20173660875318e+000
double lon = 0.0;
while(!s.next().equals("Lon:")) {
    lon = s.nextDouble();
}

// Alt: 0.00000000000000e+000
double alt = 0.0;
while(!s.next().equals("Alt:")) {
    alt = s.nextDouble();
}

// NumberOfAccesses: 4
int numberOfAccesses = 0;
while(!s.next().equals("NumberOfAccesses:")) {
    numberOfAccesses = s.nextInt();
}

// 0 4.80784667215499e+003 4.80872732950073e+003
// 0 1.05264215520092e+004 1.05273043378212e+004
// 1 1.65167780853593e+004 1.65185840063538e+004
// 1 6.52228387069902e+004 6.52246514228552e+004

// Assuming you have defined an Access class
LinkedList<Access> accesses = new LinkedList<Access>();
for(int i = 0; i < numberOfAccesses; i++) {
    // Assuming this is the constructor for the Access class
    accesses.add(new Access(s.nextInt(), s.nextDouble(), s.nextDouble()));
}
//假设您有一个名为s的扫描程序对象并指向您的文件:
//点数:33530
int pointNumber=0;
而(!s.next().equals(“点编号:)){
pointNumber=s.nextInt();
}
//纬度:8.99167773897820e-001
双lat=0.0;
而(!s.next().equals(“Lat:”){
lat=s.nextDouble();
}
//Lon:6.20173660875318e+000
双lon=0.0;
而(!s.next().equals(“Lon:)){
lon=s.nextDouble();
}
//高度:0.00000000000000 E+000
双alt=0.0;
而(!s.next().equals(“Alt:”){
alt=s.nextDouble();
}
//访问次数:4
int numberofaccess=0;
而(!s.next().equals(“numberOfAccess:”){
numberofaccess=s.nextInt();
}
//0 4.80784667215499e+003 4.80872732950073e+003
//0 1.05264215520092e+004 1.05273043378212e+004
//1 1.6516778085593E+004 1.65185840063538e+004
//1 6.52228387069902e+004 6.52246514228552e+004
//假设您已经定义了一个访问类
LinkedList Access=新建LinkedList();
for(int i=0;i

然后,您可以将实际需要的所有数据添加到“PointNumber”列表中,然后打印或从中执行任何操作。

好吧,纯YAML或XML解决方案可能比预期的更难。您是否确保在整个文件中都使用这种准确的格式?如果是这样的话,解析它就更容易了。不是精确的格式,访问点的数量(最后一行)将在none-5之间变化。无论您选择解析什么格式都可以。这相当简单。当您看到“PointNumber”时,请逐行阅读,初始化结构并一直填充到下一个“PointNumber”。如果你提出一些现成的解决方案,我可以指出可能存在的问题。