【问题标题】:Better way to parse the file?解析文件的更好方法?
【发布时间】:2014-09-04 08:07:46
【问题描述】:

我有员工的样本数据。

Brad Senior
<Fname>Brad Junior</Fname>
    CHICAGO, March 6 1990 - He is a great Java Developer.
He has worked in XYZ company.

数据格式为:

Person's name
<Fname> xxx </Fname>   // Optional
   Current Location, DOB - Description about his work.

我能够使用 BufferedReader 并使用这么多条件来解析它。

有没有更好的方法来解析这些内容(例如 Regex)并将其存储在 Employee 对象中?

我不能使用外部库。

谢谢。

【问题讨论】:

  • 如果数据是 XML 格式,请使用 XML 解析器...说真的,非常容易
  • 数据是实际的 XML 格式,还是准确的数据格式?
  • 如果它是标准格式,请使用解析器(即 XML 或其他东西)。正则表达式仅适用于正则语言(即,如果您有像 &lt;Fname&gt; 这样的嵌套标签,它将不起作用)。在这种情况下,标记化是最好的。
  • 数据不是 XML 格式。它是按照给定的格式。

标签: java file filereader


【解决方案1】:

您可以使用解析器生成器作为Cup

当格​​式变得更复杂时,它真的很有用。如果文件格式被扩展,它也使解析器的维护更容易。

【讨论】:

    【解决方案2】:

    更好是一种意见,因此您的问题天生就无法回答。正如 Tobías 所说,解析器是有争议的,您的选择范围很广。我推荐行业标准 ANTLRCup 相对,因为它在我能找到的任何地方都绝对没有许可证信息。

    【讨论】:

    • 在以下链接可以找到cup的许可证:www2.cs.tum.edu/projects/cup/install.php
    • 谢谢,我显然找错地方了。
    • 我不能使用外部库。你能提供其他方式吗?
    • 不幸的是,具有该限制的最简单解决方案是正则表达式;尽管如果您需要速度,自定义逻辑将始终击败任何外部库,因为它是唯一归因于这种情况的。此外,切换到 NIO,文件操作可以是非阻塞的,并且比“iostream.h”包装器“java.io”快得离谱。理想的设计将是“工厂”复合体,其中数据被提供给静态实例化器以生产 Employee 对象。我知道这不是您所希望的答案,您有我的哀悼。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多