解析纯文本文件中的数据结构

时间:2010-02-09 14:50:17

标签: java regex parsing data-structures

如何在Java中解析一个与此类似的结构


\\Header (name)\\\
1JohnRide  2MarySwanson
 1 password1
 2 password2
\\\1 block of data name\\\
  1.ABCD
  2.FEGH
  3.ZEY
\\\2-nd block of data name\\\
1. 123232aDDF dkfjd ksksd
2. dfdfsf dkfjd
....
etc

假设它来自文本缓冲区(普通文件)。

每行文字都是“\ n” - 有限。单词之间使用空格。

结构或多或少地定义。但是,有时可能是犯罪行为 每行信息中的字段数可能不同,有时可能不同 是一些数据块,每个块中的行数也可能不同。

问题是如何最有效地做到这一点?

我头脑中的第一个解决方案是使用正则表达式。

但还有其他解决方案吗?问题导向?也许已经编写了一些java库?

5 个答案:

答案 0 :(得分:2)

由于没有人推荐任何图书馆,我的建议是:使用REGEX。

答案 1 :(得分:1)

查看犹他州:https://github.com/sonalake/utah-parser

这是一款非常擅长解析这种半结构化文本的工具

答案 2 :(得分:0)

如果字段是固定长度,您可以使用DataInputStream来读取文件。或者,由于您的格式是基于行的,您可以使用BufferedReader来读取行并自己编写一个状态机,它知道接下来会看到什么类型的行,给定它已经看到的行。将每一行作为字符串后,您只需要适当地拆分数据。

例如,密码可以从您的密码行获取,如下所示:

final int pos = line.indexOf(' ');
String passwd = line.substring(pos+1, line.length());

答案 3 :(得分:0)

根据您发布的内容,看起来数据是由空格分隔的。一个想法是使用ScannerStringTokenizer一次获取一个令牌。然后,您可以检查令牌的第一个char以查看它是否为数字(在这种情况下,数字之后的令牌部分将是数据,如果有的话)。

答案 4 :(得分:0)

这听起来像是一个家庭作业问题所以我会尝试以这样的方式回答它,以帮助指导你(不给出最终解决方案)。

首先,您需要考虑您正在阅读的每个数据对象。它是一个数字然后是文本字段吗?一个数字然后3个文本字段?可变数字和文本字段?

之后,您需要确定要用于分隔每个字段和每个对象的内容。例如,在许多文件中,您会看到字段之间的分号和对象末尾的新行。从你说的话来看,你的声音与众不同。

如果一个物体可以穿过多条线,你需要牢记这一点(不要在物体的中途停止)。

希望这会有所帮助。如果你研究这个并且你仍然遇到问题,那么你到目前为止已经发布了一些代码和一些样本数据,我会帮你解决问题(我会教你钓鱼......不给你鱼:-))。