我真的四处搜索关于如何去这个想法,到目前为止,什么也没有翻起来。搜索Java中的文本文件,并列出搜索结果
我需要通过在一个JTextField输入的关键字来搜索文本文件,并在列的一个阵列,像谷歌如何它呈现搜索结果提供给用户。该文本文件有很多内容,大约有22,000行文字。我希望能够通过不含有在指定的JTextField单词和含有至少在搜索结果中的行中的JTextField一个关键词,每一行与所述文本文件中的行仅本线线进行筛选。
任何人有如何去任何想法?真的很感激任何帮助。谢谢你在前进
我真的四处搜索关于如何去这个想法,到目前为止,什么也没有翻起来。搜索Java中的文本文件,并列出搜索结果
我需要通过在一个JTextField输入的关键字来搜索文本文件,并在列的一个阵列,像谷歌如何它呈现搜索结果提供给用户。该文本文件有很多内容,大约有22,000行文字。我希望能够通过不含有在指定的JTextField单词和含有至少在搜索结果中的行中的JTextField一个关键词,每一行与所述文本文件中的行仅本线线进行筛选。
任何人有如何去任何想法?真的很感激任何帮助。谢谢你在前进
您可以逐行读取文件中的行,并在每行关键字搜索。如果找到一个,请将该行存储在数组中。
但首先由空格分割你的文本框字符串和创建数组:
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;
}
}
}
String[] keyWords = yourTextBoxString.split(" ");
ArrayList<String> results = new ArrayList<String>();
逐行读取文件中的行我没有对此进行测试,但您应该了解如何做到这一点。
如果需要更快的速度,你也可以使用一个RegularExpression搜索的关键字,所以你不需要这个for循环做。
根据Oracle教程http://docs.oracle.com/javase/tutorial/essential/io/file.html#textfiles读入文件遍历每行并使用字符串的包含方法搜索关键字。如果它包含搜索词组,请将行号和行号放入结果列表中。完成后,您可以将结果列表显示给用户。
您需要的方法如下:
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循环检查每个字符串匹配。
您可以使用: FileUtils
这将读取每一行,返回你List<String>
。
您可以遍历此List<String>
并检查String
是否包含由用户输入的单词(如果它包含),将其添加到另一个List<String>
。那么最后你会有另一个List<String>
,其中包含所有包含用户输入的单词的行。您可以迭代此List<String>
并将结果显示给用户。