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

Posted

技术标签:

【中文标题】在数据结构中解析不同大小的数组 - Java【英文标题】:Parse varying sized arrays in data structure - Java 【发布时间】:2011-03-02 00:16:19 【问题描述】:

作为一名 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 开头的行,对应于 Number of Accesses 行中的整数。我想通过解析 文件并在每个访问实例之后打印 Lat、Lon 和两个值,只有 PointNumbers 具有超过 1 个访问次数。

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

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

如果访问数组长度> 1,则循环遍历对象并打印对象的值。另一方面,最好忽略不符合要求的信息。这可以通过在解析时检查 NumberOfAccesses 值然后跳转到下一个 string.startsWith("PointNumber:") 如果值

我感觉这个社区的绝大多数人都会尝试引导我使用 XML 或 YAML,但我更喜欢尝试 在 Java 中解决这个问题。任何建议、方向或适用的例子总是非常感谢。

【问题讨论】:

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

当你有输入进行解析时,你可以循环遍历它

// 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()));

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

【讨论】:

以上是关于在数据结构中解析不同大小的数组 - Java的主要内容,如果未能解决你的问题,请参考以下文章

java的数据类型的解析

C语言学习笔记整理

Java HashMap类源码解析

IT兄弟连 Java语法教程 综合案例

Oracle SQL:JSON 表;获取数组的大小

c语言和java 使用socket通信的时候 数据大小端转换的问题