[英]Searching a text file in java and Listing the results
我确实在四处寻找有关如何解决此问题的想法,但到目前为止没有任何发现。
我需要通过在JTextField中输入的关键字来搜索文本文件,并将搜索结果以列数组的形式呈现给用户,例如google的方式。 文本文件包含很多内容,大约22,000行文本。 我希望能够在不包含JTextField中指定的单词的行中进行筛选,并且仅在搜索结果行中显示包含JTextField中至少一个单词的行,每一行都是来自文本文件的一行。
任何人都对此有任何想法吗? 非常感谢任何帮助。 先感谢您
您可以逐行阅读文件,并在每一行中搜索关键字。 如果找到一个,则将行存储在数组中。
但是,首先用空格将文本框String拆分,然后创建数组:
String[] keyWords = yourTextBoxString.split(" ");
ArrayList<String> results = new ArrayList<String>();
逐行读取文件:
void readFileLineByLine(File file) {
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
processOneLine(line);
}
br.close();
}
处理线:
void processOneLine(String line) {
for (String currentKey : keyWords) {
if (line.contains(currentKey) {
results.add(line);
break;
}
}
}
我没有对此进行测试,但是您应该获得有关如何执行此操作的概述。
如果需要更高的速度,还可以使用RegularExpression搜索关键字,因此不需要for循环。
按照Oracle教程http://docs.oracle.com/javase/tutorial/essential/io/file.html#textfiles读入文件遍历每一行,并使用String的contains方法搜索您的关键字。 如果包含搜索短语,请将行和行号放在结果列表中。 完成后,您可以向用户显示结果列表。
您需要一种如下方法:
List<String> searchFile(String path, String match){
List<String> linesToPresent = new ArrayList<String>();
File f = new File(path);
FileReader fr;
try {
fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
String line;
do{
line = br.readLine();
Pattern p = Pattern.compile(match);
Matcher m = p.matcher(line);
if(m.find())
linesToPresent.add(line);
} while(line != null);
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return linesToPresent;
}
它逐行搜索文件,并使用正则表达式检查行是否包含“匹配”字符串。 如果要检查的字符串很多,则可以将第二个参数更改为String[] match
并使用foreach循环检查每个String匹配项。
您可以使用: FileUtils
这将读取每一行并返回List<String>
。
您可以遍历此List<String>
并检查String
是否包含用户输入的单词,如果包含,请将其添加到另一个List<String>
。 那么最后您将拥有另一个List<String>
,其中包含所有包含用户输入的单词的行。 您可以迭代此List<String>
并将结果显示给用户。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.