2013-07-31 160 views
0

我真的四處搜索關於如何去這個想法,到目前爲止,什麼也沒有翻起來。搜索Java中的文本文件,並列出搜索結果

我需要通過在一個JTextField輸入的關鍵字來搜索文本文件,並在列的一個陣列,像谷歌如何它呈現搜索結果提供給用戶。該文本文件有很多內容,大約有22,000行文字。我希望能夠通過不含有在指定的JTextField單詞和含有至少在搜索結果中的行中的JTextField一個關鍵詞,每一行與所述文本文件中的行僅本線線進行篩選。

任何人有如何去任何想法?真的很感激任何幫助。謝謝你在前進

回答

0

您可以逐行讀取文件中的行,並在每行關鍵字搜索。如果找到一個,請將該行存儲在數組中。

但首先由空格分割你的文本框字符串和創建數組:

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循環做。

0

您需要的方法如下:

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循環檢查每個字符串匹配。

0

您可以使用: FileUtils

這將讀取每一行,返回你List<String>

您可以遍歷此List<String>並檢查String是否包含由用戶輸入的單詞(如果它包含),將其添加到另一個List<String>。那麼最後你會有另一個List<String>,其中包含所有包含用戶輸入的單詞的行。您可以迭代此List<String>並將結果顯示給用戶。