从10 Mb的大文本文件中搜索字符串

时间:2013-12-06 02:03:47

标签: android regex search full-text-search search-engine

我有一个大约10 MB的大文件,我想搜索一个特定的字符串,这个特定的字符串可能会在10 Mb文本文件中使用很多次。我需要使用此特定字符串的结果。我想像谷歌一样搜索。例如,当我写一个字符串然后谷歌带有匹配的模式。您的建议将不胜感激。

file formate


  1. 他要去上学。
  2. 我们应该做最好的事。
  3. 我们应该努力。 。 。 。
  4. 总是说实话。


    我的应用程序中有搜索编辑字段。 用户在搜索编辑字段中写“应该”,然后按搜索按钮。 应该打开一个列表,其中搜索到的单词带有完整的行。 例如结果应该是


  5. 我们应该做最好的事情。

  6. 我们应该努力工作。

1 个答案:

答案 0 :(得分:1)

搜索文件并与“上下文”匹配的简单方法是使用grep。例如,要将每一行与“hello”相匹配,并在之前打印一行并在​​之后打三行,您将会这样做

grep -b1 -a3 'hello' myBigFile.txt

您可以使用grep -E来允许广泛的PCRE正则表达式语法。

如果没有更多细节,很难给你一个更好的答案。

编辑2

现在您已经更清楚地解释了您的问题,这是一种可行的方法:

InputStream fileIn;
BufferedReader bufRd;
String line, pattern;
pattern = "should";  // get the pattern from the user, do not hard code. Example only

fileIn = new FileInputStream("myBigTextfile.txt");
bufRd = new BufferedReader(new InputStreamReader(fis, Charset.forName("UTF-8")));
while ((line = bufRd.readLine()) != null) {
    if(line.contains(pattern)) {
      System.out.println(line); // echo matching line to output
    }
}

// Done with the file
br.close();

如果您需要与通配符匹配,那么您可以将line.contains替换为更多“硬核正则表达式” - 例如

matchPattern = Pattern.compile("/should.+not/");

(只需要这样做一次 - 在获得输入之后,在打开文件之前)并将条件更改为

if (matchPattern.matcher(line).find())

注意 - 代码改编自/ https://stackoverflow.com/a/7413900/1967396但尚未经过测试。

注意没有for循环...也许老板现在会很开心。

顺便说一句 - 如果您使用评论中提供的所有信息(包括此答案和原始问题)编辑原始问题,我认为问题可以重新打开。

如果您希望用户进行多次搜索,则将整个文件读入内存可能会更快一次。但我认为这超出了你的问题的范围。