2013-07-31 119 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>并将结果显示给用户。