【问题标题】:Algorithms for string processing字符串处理算法
【发布时间】:2013-04-05 16:04:50
【问题描述】:

我有一个问题让我思考如何提高系统的速度和内存。 我将通过示例来描述它,我有这个文件有一些字符串:

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

类似于xml文件。

现在,我的解决方案是当我读取&lt;e&gt;Customer&lt;/e&gt; 时,我会从它读取到最近的标签,然后从&lt;e&gt;Customer&lt;/e&gt; 到最近的标签。

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

有什么想法吗?

提前致谢!

【问题讨论】:

  • 为什么不定义一个实际的 XML 文档(您可以定义自己的标签,所以我认为您显示的内容可能已经有效...),然后通过 XML 解析之一运行它图书馆?
  • 感谢您的快速回复,这对我来说只是一个挑战。我正在搜索要查看的开源 xml,但所有开源都使用来自 jdk 的源代码。
  • 虽然 JDK 本身在技术上似乎是用于 Linux(部署)的,但相当多的 Java 代码本身仍然应该是“可移植的”——请查看 OpenJDK,它是JDK。

标签: java string algorithm compiler-construction


【解决方案1】:

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

请参阅此How to create a simple state machine in java 问题以获得良好的开端。

请确保有一个非常充分的理由选择这条路线。

【讨论】:

  • @TrungHuynh - 很遗憾听到这个消息 - 祝你好运。有很多资源涵盖状态机。
【解决方案2】:

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

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

【讨论】:

  • 我在 PhoneGap 中处理数据,我认为在 Javascript 中没有最好的 xml 解析器。这是我这样做的原因。
  • @TrungHuynh 对于适度大的输入,即使是糟糕的 XML 解析器也能胜过正则表达式。
  • 好的,我同意,那我为什么不构建一个更适合我的目的的新解析器呢?
  • 因为稍微调整一下你的目标可以为你节省数周的困难和容易出错的工作,并为你提供一个现在有效的解决方案。
【解决方案3】:

只是不要将时间花在 XML 词法分析器/解析器上(不值得),而是使用现有的东西。

例如http://www.mkyong.com/tutorials/java-xml-tutorials/是一个很好的教程,用google就行了。

【讨论】:

  • 谢谢,如果有任何语言没有内置 XML 词法分析器和解析器?
猜你喜欢
  • 2012-11-20
  • 2013-04-18
  • 1970-01-01
  • 2017-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
相关资源
最近更新 更多