创建Java程序以搜索特定Word的文件

我只是在学习那种语言,并想知道Java程序员在以下情况下会有更多经验吗?

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

你会怎么做呢,Java API是否提供了一个提供文件扫描function的类,或者我必须编写自己的类来执行此操作?

感谢您的任何意见,
大教堂。

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

但是,根据您打算如何使用它,这可能不是最好的主意。 文件非常大吗? 您是只搜索一个文件还是试图保留许多文件的数据库并在其中搜索文件? 在这种情况下,您可能希望使用更加丰富的引擎,例如lucene 。

除非文件非常大,否则我会

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

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

正如其他人指出的那样,您可以使用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表示边界词
  • java是搜索的字符串
  • \b一个词边界。

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