代码之家  ›  专栏  ›  技术社区  ›  defectivehalt

用Java编写文件解析器的技巧[关闭]

  •  6
  • defectivehalt  · 技术社区  · 16 年前

    解释CSV块是这里的主要问题。

    String[] 以及 String ,但我不认为使用像 contains()

    我有哪些方法可以更聪明地做到这一点?

    行的示例:

    -barfoob: boobs, foob, "foo bar"

    12 回复  |  直到 13 年前
        1
  •  7
  •   Michael Borgwardt    16 年前

    有一个原因是每个人都认为您在谈论XML:发明一种基于文本的专有文件格式需要 非常强壮 面对XML解析器的成熟性和易用性,这是正确的。

    您的问题表明您对解析器的了解很少(否则您将编写一个 ANTLR JavaCC

        2
  •  6
  •   bguiz    16 年前

    因为输入是“ ,则很可能您的数据最好使用树状结构来表示,而且很可能它是XML或类似于XML。

    以下是一些您可能会觉得有用的资源:

        3
  •  2
  •   Community Mohan Dere    9 年前

    如果文档是有效的XML,那么其他任何答案都可以。如果不是,你会 have to lex

        4
  •  2
  •   user177800 user177800    16 年前

    即使您想自己编写解析器,也应该查看ANTLR,ANTLR是一个很好的替代方案。或者至少看看 YAML

        5
  •  2
  •   Community Mohan Dere    9 年前

    This 并在维基百科中挖掘 related articles

        6
  •  2
  •   Jonas    16 年前

    我认为java.util.Scanner将帮助您。看看 http://java.sun.com/javase/6/docs/api/java/util/Scanner.html

        7
  •  1
  •   mlathe    16 年前

    根据“模式”的复杂程度,正则表达式可能是您想要的。如果存在大量嵌套,那么转换为XML或JSON并使用预构建的解析器可能是最容易的。

        8
  •  1
  •   CPerkins    16 年前

    人们对标准格式是最佳实践的看法是正确的,但让我们把它放在一边。

    假设您给出的示例具有代表性,那么任务就相当简单了。

    显示带有初始标记的行,用冒号空格取消标记,然后是逗号分隔的值列表。在第一个冒号空格处分开,然后在右边的零件上使用split()。引号的处理也很简单。

        9
  •  1
  •   bojangle    16 年前

    -barfoob: boobs, foob, "foo bar"

    如果这就是您想要解析的内容,我有另一个建议,使用Java属性解析器(标准Java附带),然后使用您自己的自定义代码解析每行的其余部分。为了让它正常工作,您需要对格式进行一些重构,所以这取决于您自己。

    barfoob=boobs, foob, "foo bar"

    Java属性将能够返回给您 barfoob boobs, foob, "foo bar" 作为属性值。在这里,您可以使用自定义代码将属性值拆分为 boobs , foob foo bar .

        10
  •  1
  •   Pascal Thivent    16 年前

    我强烈建议不要重新发明轮子,而使用现有的解决方案,如 Flatworm Fixedformat4j jFFP 这可以解析位置或逗号分隔的值文件(我个人推荐Flatworm)。

        11
  •  0
  •   Damo    16 年前

    您可以使用 Neko HTML parser

        12
  •  0
  •   user257111 user257111    16 年前

    如果XML是有效的,我个人更喜欢使用 http://www.xom.nu 只是因为它有一个很好的DOM模型。但是,正如所指出的,J2SE中有解析器。