编辑:我主要解析“逗号分隔值”,模糊地引起了我的注意。
解释CSV块是这里的主要问题。
我知道如何将文件读取为String[]
以及String
的一些基本功能,但我不认为使用contains()
等方法并分析所有字符按性格将起作用。
我能以更聪明的方式做些什么方法?
一行示例:
-barfoob: boobs, foob, "foo bar"
答案 0 :(得分:7)
每个人都认为你在谈论XML是有原因的:面对XML解析器的成熟和易用性,发明一种专有的基于文本的文件格式需要非常强大的理由。
你的问题表明你对解析器的了解很少(否则你会写一个ANTLR或JavaCC语法而不是问这个问题) - 这是反对滚动的另一个强有力的论据你自己的,除了学习经验。
答案 1 :(得分:6)
由于输入“格式与HTML 类似”,因此您的数据很可能使用树状结构进行最佳表示,而且很可能是XML或类似到XML。
如果是这种情况,我建议解析文件的最聪明方法是使用XML解析器。
以下是您可能会发现有用的一些资源:
HTH
答案 2 :(得分:2)
如果文档是有效的XML,那么任何其他答案都可以。如果不是,你会have to lex。
答案 3 :(得分:2)
即使您想自己编写解析器,也应该查看ANTLR,ANTLR是一个很好的选择。或者至少查看YAML
答案 4 :(得分:2)
This并通过维基百科挖掘related articles可能就足够了。
答案 5 :(得分:2)
我认为java.util.Scanner会帮助你。看看http://java.sun.com/javase/6/docs/api/java/util/Scanner.html
答案 6 :(得分:1)
根据您的“架构”的复杂程度,正则表达式可能就是您想要的。如果有很多嵌套,那么转换为XML或JSON并使用预构建的解析器可能最容易。
答案 7 :(得分:1)
人们对标准格式是最佳做法是正确的,但让我们把它放在一边。
假设您给出的示例具有代表性,那么任务就非常简单。
您显示一行,其中包含一个初始标记,用冒号空格标记,然后是逗号分隔值列表。在第一个冒号空间分开,然后在右边的部分使用split()。报价的处理也是微不足道的。
答案 8 :(得分:1)
在查看您的示例输入后,我看不到与HTML或XML有任何相似之处:
-barfoob: boobs, foob, "foo bar"
如果这是您要解析的内容,我有另一个建议,使用Java属性解析器(标准Java附带),然后使用您自己的自定义代码解析每行的其余部分。您需要稍微重构一下您的格式才能使其正常工作,所以这取决于您。
barfoob=boobs, foob, "foo bar"
Java属性将能够返回barfoob
作为属性名称,并boobs, foob, "foo bar"
作为属性值。您可以使用自定义代码将属性值拆分为boobs
,foob
和foo bar
。
答案 9 :(得分:1)
我强烈建议不要重新发明方向并使用现有的解决方案,例如Flatworm,Fixedformat4j或jFFP,它们都可以解析位置或逗号分隔值文件(个人,我推荐Flatworm)。
答案 10 :(得分:0)
您可以在某种程度上使用Neko HTML parser。这取决于它如何处理非标准HTML。
答案 11 :(得分:0)
如果XML有效,我个人更喜欢使用http://www.xom.nu,因为它具有很好的DOM模型。但正如所指出的,J2SE中有解析器。