[英]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.