2013-04-05 103 views
1

我有一个问题,这让我想到如何提高系统的速度和内存。 我将通过举例进行说明,我有这个文件,它有一些字符串:字符串处理算法

<e>Customer</e> 
    <a1>Customer Id</a1> 
    <a2>Customer Name</a2> 
<e>Person</e> 

它类似于XML文件。

现在,我的解决办法是,当我读到<e>Customer</e>,我会从阅读到最近的标签,然后,从子到<e>Customer</e>最近的标签。

它使系统需要处理这么多。我只用正则表达式来做到这一点。我认为我会像真正的编译器那样做一些事情(词法分析,分析器)。

任何想法?

在此先感谢!

+2

为什么不定义一个实际的XML文档(您可以定义自己的标签,所以我认为您已经显示的内容可能已经有效......),然后通过其中一个XML解析库运行它? – 2013-04-05 16:07:40

+0

感谢您的快速回复,这对我来说只是一个挑战。我正在寻找开源的xml来查看,但所有的开源使用jdk的源代码。 – 2013-04-05 16:29:09

+0

尽管技术上JDK本身似乎适用于Linux(部署),但一小部分Java代码本身仍应该是“便携式”的 - 请查看[OpenJDK](http://openjdk.java.net/),这是一个JDK的开源版本。 – 2013-04-05 17:29:23

回答

2

如果你真的不想使用免费和可靠的XML解析器之一,那么一个真正快速的解决方案几乎肯定会涉及到一个状态机。

看到这个How to create a simple state machine in java问题有个好的开始。

请确保你有一个非常服用这条路线的好理由。

+0

+ 1.这是我的出路。 – 2013-04-05 16:35:33

+0

@TrungHuynh - 我很遗憾听到 - 祝你好运。有很多资源覆盖状态机。 – OldCurmudgeon 2013-04-05 23:01:21

1

只是不把时间投入到XML词法分析器/解析器(它不值得),并使用什么是在那里。

例如http://www.mkyong.com/tutorials/java-xml-tutorials/是一个很好的教程,只是使用谷歌。

+0

谢谢,如果有任何语言没有内置的XML词法分析器和解析器? – 2013-04-05 16:30:09

2

正则表达式不是解析这样的复杂结构的正确工具。由于您的文件看起来很像XML,因此添加缺少的内容以使其成为XML(即标头)并将结果提供给XML解析器可能很有意义。

XML解析器针对快速处理大量数据(特别是SAX类型)进行了优化。如果切换到使用正则表达式处理大量文本来解析XML,则应该看到性能显着提高。

+0

我在PhoneGap中处理数据,我认为,在Javascript中没有最好的xml解析器。这是我做的原因。 – 2013-04-05 16:34:50

+0

@TrungHuynh对于适度大的输入,即使是错误的XML解析器仍然会击败正则表达式。 – dasblinkenlight 2013-04-05 16:47:17

+0

好的,我同意,为什么我不建立一个更适合我的目的的新解析器? – 2013-04-05 17:21:39