繁体   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