2010-12-02 47 views
3

我只是在学习该语言,并想知道在以下情况下Java程序员会做什么更多的经验?创建一个Java程序来搜索一个特定的文件的文件

我想创建一个java程序,将搜索指定文件的所有实例的特定单词。

你会怎么做呢,Java API是否提供了一个提供文件扫描功能的类,或者我将不得不编写自己的类来做到这一点?

感谢您的任何输入,
Dom。

+0

什么特定的词? – 2010-12-02 18:30:56

+1

搜索不区分大小写吗?例如“猫”是否匹配“猫”? – 2010-12-02 18:31:22

回答

6

java API确实提供了java.util.Scanner类,它允许您扫描输入文件。

但是,根据你打算如何使用这个,这可能不是最好的主意。文件非常大吗?你只搜索一个文件还是你想保留一个数据库的许多文件,并在其中搜索文件?在这种情况下,您可能需要使用更加充实的引擎,如lucene

3

除非该文件是非常大的,我会

String text = IOUtils.toString(new FileReader(filename)); 
boolean foundWord = text.matches("\\b" + word+ "\\b"); 

要查找所有单词之间的文本,你可以使用分裂(),并使用字符串的长度来确定位置。

3

正如其他人指出的那样,您可以使用Scanner类。

我把你的问题在文件中,data.txt,并运行下面的程序:

import java.io.*; 
import java.util.Scanner; 
import java.util.regex.MatchResult; 

public class Test { 
    public static void main(String[] args) throws FileNotFoundException { 
     Scanner s = new Scanner(new File("data.txt")); 
     while (null != s.findWithinHorizon("(?i)\\bjava\\b", 0)) { 
      MatchResult mr = s.match(); 
      System.out.printf("Word found: %s at index %d to %d.%n", mr.group(), 
        mr.start(), mr.end()); 
     } 
     s.close(); 
    } 
} 

输出是:

Word found: Java at index 74 to 78. 
Word found: java at index 153 to 157. 
Word found: Java at index 279 to 283. 

模式搜索,(?i)\bjava\b,意味着:

  • (?i)打开不区分大小写的开关
  • \b意味着一个字boundry
  • java是字符串搜索
  • \b一个字boundry一次。

如果搜索词来自于用户,或者如果它用于其它一些原因,可能包含特殊字符,我建议你使用\Q\E串绕,因为它引用的所有字符之间,(如果你真的很挑剔,请确保输入本身不包含\E)。

相关问题