【问题标题】:Searching a Files Content Using Java?使用 Java 搜索文件内容?
【发布时间】:2011-05-25 15:05:53
【问题描述】:

我想用 java 编写一个应用程序,它允许我打开一个文件 (txt) 并使用用户输入搜索特定单词或字符串的所有实例。

由于这里可能有更多经验丰富的程序员,我想要一些关于如何去创建这样一个工具的建议。您将如何创建一个基本的文本搜索工具?

我一直在玩一些 java 类,例如 File、FileOutputStream、FileInputStream、InputStreamReader、OutputStreamReader、FileReader、StreamTokenizer,想知道使用 java 打开和搜索文件的最佳方式吗?

感谢您的任何意见, 设计。

【问题讨论】:

  • 这是作业吗?如果是这样,请编辑您的问题,以包括您迄今为止完成的工作,我们可以帮助您改进它。 :)

标签: java search full-text-search


【解决方案1】:

FileScannerStringBuilder 一起使用应该可以让您对该主题有个良好的开端。

【讨论】:

    【解决方案2】:

    我建议使用某种哈希表。如果您的数据没有变化(这只是对静态文档的基本搜索,还是类似于文本编辑器的一部分?)然后Perfect Hashing 将为您提供恒定时间查找。这非常快。如果没有,可以尝试 Cuckoo 散列,甚至只是线性探测。

    我会使用Scanner 或任何缓冲的阅读器读取文件,将每个单词作为关键的任何附加数据(例如所有出现的行号/单词索引),然后您可以查询哈希表超级快。

    编辑:这是字符串完美散列的 Java 实现:http://blog.tomgibara.com/post/438939809/minimal-perfect-hash-strings

    【讨论】:

      【解决方案3】:

      您想对搜索结果做什么?是否只是计算给定单词或短语的出现次数?如果用户键入“line”并且文件包含“lines”怎么办?应该有比赛吗?您是否必须允许对同一个文件进行多次搜索?

      无论如何,全文搜索是一个非常复杂的主题。但是有帮助;-)。我对您的建议是使用开源Lucene 项目为要搜索的文件创建一个内存索引。它非常快,并且可以回答上述所有问题等等。 Here 是创建该内存索引的代码。创建索引后,您可以执行sophisticated searches

      【讨论】:

        【解决方案4】:

        您可以在文本文件中读取一个字符串,然后调用 split() 方法。请参阅文档。这将返回一个字符串数组。在此之后,您可以对数组进行搜索(即二进制搜索)并继续执行此操作,删除您找到的单词并保存位置,直到找到所有实例。之后,您将获得文档中搜索字符串的所有位置。

        这是一篇关于二进制搜索的维基百科文章,以备不时之需: http://en.m.wikipedia.org/wiki/Binary_search_algorithm?wasRedirected=true

        【讨论】:

          【解决方案5】:

          为了提高速度,我会使用 BufferedReader。像这样:

          BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(givenFile)));
          

          BufferedReader 是读取文件的最有效方式,恕我直言。

          存在一个由 Keith Fenske 创建并命名为 FileSearch 的现有工具。您可以下载源代码并查看它:)

          【讨论】:

          • 你为什么使用包裹在 InputStreamReader 中的 FileInputStream 而不是 FileReader?
          猜你喜欢
          • 1970-01-01
          • 2021-06-07
          • 2011-05-31
          • 2014-02-18
          • 2012-03-10
          • 2023-03-23
          • 1970-01-01
          • 2013-02-03
          • 1970-01-01
          相关资源
          最近更新 更多