找到长串的模式?

时间:2011-01-19 15:01:34

标签: java android html string

我有40KB的HTML页面,我想在其中找到某些模式。

我可以通过1K缓冲区读取它,但我想避免我正在搜索的模式将在两个缓冲区读取之间拆分的情况。

如何克服这个问题?

4 个答案:

答案 0 :(得分:3)

这很容易。您将计算要查找的最长模式,然后将文件指针回溯该量,或者滚动文件,只读取增量。

想象一下最长的模式是26个字节。

  1. 阅读1k。
  2. 检查所有模式 - >什么都没有。
  3. 从缓冲区中删除1k - 26个字节。
  4. 从流中读取1k - 26个字节并添加到缓冲区
  5. 转到2。
  6. 编辑:让我澄清一下:有两种方法可以做到这一点,两者都有其优点。如果您从流中读取,我最好使用上面记录的那个,这意味着不支持搜索的数据源。但是,如果您的数据源支持搜索(如文件系统文件),则可以轻松地对搜索执行相同操作。检查图案,如果没有找到,请找回最长图案的尺寸,然后从那里开始。

    但是,如果您希望支持搜索长度超过缓冲区大小的模式,则可能需要更加聪明的算法。当你继续读取更多数据时,你需要一个当前“打开”的所有模式的查找表,这反过来会花费更多的内存 - 你会遇到问题。

答案 1 :(得分:2)

这就是Scanner类的用途。

答案 2 :(得分:1)

您可以查看CharBuffer,为此目的实施CharSequence

答案 3 :(得分:0)

为什么不使用SAX parser。它是为处理大型标记文件而构建的。如果您尝试匹配同一级别的不同元素,则会遇到问题。然而,这并非不可能处理