我真的四处寻找有关如何解决此问题的想法,但到目前为止还没有任何结果。
我需要通过在 JTextField 中输入的关键字搜索文本文件,并将搜索结果以列数组的形式呈现给用户,就像 google 的做法一样。文本文件内容很多,大约22000行文本。我希望能够筛选不包含 JTextField 中指定的单词的行,并且只在搜索结果行中显示包含 JTextField 中至少一个单词的行,每一行都是文本文件中的一行。
有人对如何解决这个问题有任何想法吗?非常感谢任何形式的帮助。先感谢您
您可以逐行阅读文件并在每一行中搜索关键字。如果你找到一个,将这一行存储在一个数组中。
但首先用空格分割你的文本框字符串并创建数组:
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;
}
}
}
我没有对此进行测试,但您应该大致了解如何做到这一点。
如果您需要更快的速度,您还可以使用正则表达式来搜索关键字,这样您就不需要这个 for 循环。
读入文件,根据 Oracle 教程,http: //docs.oracle.com/javase/tutorial/essential/io/file.html#textfiles 遍历每一行并使用字符串的 contains 方法搜索您的关键字。如果它包含搜索短语,请将行和行号放在结果列表中。完成后,您可以向用户显示结果列表。
您可以使用: FileUtils
这将读取每一行并返回一个List<String>
.
您可以对其进行迭代List<String>
并检查是否String
包含用户输入的单词,如果包含,则将其添加到另一个List<String>
. 然后在最后你将有另一个List<String>
包含包含用户输入的单词的所有行。您可以对其进行迭代List<String>
并将结果显示给用户。
你需要一个方法如下:
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 循环检查每个字符串匹配。