【问题标题】:Parsing text in java在java中解析文本
【发布时间】:2026-01-22 14:30:02
【问题描述】:

我是高级编程的新手, 好吧,我知道它非常不专业的问题:-

我喜欢用java解析文件

例如 我的 in.vmf 包含:

vaps graxxx
metagraphic  
ccccc cccc
vvvv vvvv
xxx cccc
Begin_object "xxx"
 Translate
 somethoing
 anything
end Begin_object

我想用以下规则解析上面的文件:

  • 如果它找到第一行“vaps graxx”,它将继续复制/解析,直到找到 Begin_object。并添加一些行
  • 然后搜索其他单词并复制/解析直到某些内容并添加一些行
  • 继续进行其他类似搜索等

如果我的代码在这里

    BufferedReader FileBuf;

    try{

        // Open the file and read the file
        FileBuf = new BufferedReader(new FileReader("arc.VMF"));


        // Create a new file 
        OutputFile = new PrintWriter(new FileWriter("newarc.VMF"));

        // Start reading file Line by Line 

        while ((LineRead = FileBuf.readLine()) != null) {

            // LineStr = LineRead.split("");

            if (LineRead.isEmpty()) {
                System.out.println("Line is empty");

            }
            if ((LineRead.startsWith("%"))
                    && (LineRead.indexOf("V A P S") > 0)) {
                OutputFile.println(LineRead);
            }
            if (LineRead.indexOf("BEGIN_OBJECT") > 0) {
                    OutputFile.println(LineRead);

                }

.......
.....
....
            }

        FileBuf.close();
        OutputFile.close();

谁能给点建议,会很有帮助的。 谢谢

【问题讨论】:

标签: java io file-handling


【解决方案1】:

我的建议是使用 jflex 和 cup 之类的东西编写解析器(用 java 或其他语言)。

通过这样做,您可以解析文件并指定非常清晰的规则。

看看这里:http://en.wikipedia.org/wiki/Lexical_analysis 和这里http://en.wikipedia.org/wiki/Parsing

JFlex : http://jflex.de/

杯子:http://www.cs.princeton.edu/~appel/modern/java/CUP/manual.html

【讨论】:

  • 你忘记了他们中最宽容的人!我的意思是ANTLR,当然。
  • 是的,但是我不是很了解,我已经成功使用过JFlex/Cup,所以我可以客观真诚地推荐它;)
  • 谢谢,但我只需要使用 Java
  • 嗯,JFlex、cup 和 ANTLR 都是用 java 编码的。你想说你不想使用外部框架,不是吗?
  • 没错。这个解析代码需要嵌入到其他项目中,所以我们没有太多空间使用其他框架/工具。