我真的四處搜索關於如何去這個想法,到目前爲止,什麼也沒有翻起來。搜索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>
並將結果顯示給用戶。