创建一个Java程序来搜索一个特定的文件的文件
问题描述:
我只是在学习该语言,并想知道在以下情况下Java程序员会做什么更多的经验?创建一个Java程序来搜索一个特定的文件的文件
我想创建一个java程序,将搜索指定文件的所有实例的特定单词。
你会怎么做呢,Java API是否提供了一个提供文件扫描功能的类,或者我将不得不编写自己的类来做到这一点?
感谢您的任何输入,
Dom。
答
java API确实提供了java.util.Scanner
类,它允许您扫描输入文件。
但是,根据你打算如何使用这个,这可能不是最好的主意。文件非常大吗?你只搜索一个文件还是你想保留一个数据库的许多文件,并在其中搜索文件?在这种情况下,您可能需要使用更加充实的引擎,如lucene。
答
除非该文件是非常大的,我会
String text = IOUtils.toString(new FileReader(filename));
boolean foundWord = text.matches("\\b" + word+ "\\b");
要查找所有单词之间的文本,你可以使用分裂(),并使用字符串的长度来确定位置。
答
正如其他人指出的那样,您可以使用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
)。
什么特定的词? – 2010-12-02 18:30:56
搜索不区分大小写吗?例如“猫”是否匹配“猫”? – 2010-12-02 18:31:22