簡體   English   中英

在Java中搜索文本文件並列出結果

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM