我有一个大约10 MB的大文件,我想搜索一个特定的字符串,这个特定的字符串可能会在10 Mb文本文件中使用很多次。我需要使用此特定字符串的结果。我想像谷歌一样搜索。例如,当我写一个字符串然后谷歌带有匹配的模式。您的建议将不胜感激。
file formate
总是说实话。
我的应用程序中有搜索编辑字段。 用户在搜索编辑字段中写“应该”,然后按搜索按钮。 应该打开一个列表,其中搜索到的单词带有完整的行。 例如结果应该是
我们应该做最好的事情。
答案 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循环...也许老板现在会很开心。
顺便说一句 - 如果您使用评论中提供的所有信息(包括此答案和原始问题)编辑原始问题,我认为问题可以重新打开。
如果您希望用户进行多次搜索,则将整个文件读入内存可能会更快一次。但我认为这超出了你的问题的范围。