0

我真的四处寻找有关如何解决此问题的想法,但到目前为止还没有任何结果。

我需要通过在 JTextField 中输入的关键字搜索文本文件,并将搜索结果以列数组的形式呈现给用户,就像 google 的做法一样。文本文件内容很多,大约22000行文本。我希望能够筛选不包含 JTextField 中指定的单词的行,并且只在搜索结果行中显示包含 JTextField 中至少一个单词的行,每一行都是文本文件中的一行。

有人对如何解决这个问题有任何想法吗?非常感谢任何形式的帮助。先感谢您

4

4 回答 4

0

您可以逐行阅读文件并在每一行中搜索关键字。如果你找到一个,将这一行存储在一个数组中。

但首先用空格分割你的文本框字符串并创建数组:

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;
        }
    }
}

我没有对此进行测试,但您应该大致了解如何做到这一点。

如果您需要更快的速度,您还可以使用正则表达式来搜索关键字,这样您就不需要这个 for 循环。

于 2013-07-31T07:58:33.590 回答
0

读入文件,根据 Oracle 教程,http: //docs.oracle.com/javase/tutorial/essential/io/file.html#textfiles 遍历每一行并使用字符串的 contains 方法搜索您的关键字。如果它包含搜索短语,请将行和行号放在结果列表中。完成后,您可以向用户显示结果列表。

于 2013-07-31T08:02:43.033 回答
0

您可以使用: FileUtils

这将读取每一行并返回一个List<String>.

您可以对其进行迭代List<String>并检查是否String包含用户输入的单词,如果包含,则将其添加到另一个List<String>. 然后在最后你将有另一个List<String>包含包含用户输入的单词的所有行。您可以对其进行迭代List<String>并将结果显示给用户。

于 2013-07-31T10:00:50.720 回答
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 循环检查每个字符串匹配。

于 2013-07-31T08:07:34.657 回答