我只是在学习那种语言,并且想知道Java程序员在以下情况下会有更多经验吗?
我想创建一个java程序,它将在指定的文件中搜索特定单词的所有实例。
你会如何解决这个问题,Java API是否提供了一个提供文件扫描功能的类,还是我必须编写自己的类来执行此操作?
感谢您的任何意见,
DOM。
答案 0 :(得分:6)
java API提供了java.util.Scanner
类,允许您扫描输入文件。
但是,根据您打算如何使用它,这可能不是最好的主意。文件非常大吗?您是只搜索一个文件还是试图保留许多文件的数据库并在其中搜索文件?在这种情况下,您可能希望使用更加充实的引擎,例如lucene。
答案 1 :(得分:3)
除非文件非常大,否则我会
String text = IOUtils.toString(new FileReader(filename));
boolean foundWord = text.matches("\\b" + word+ "\\b");
要查找单词之间的所有文本,可以使用split()并使用字符串的长度来确定位置。
答案 2 :(得分: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
表示单词边界java
是搜索到的字符串\b
再一次接受限制。如果搜索字词来自用户,或者由于其他原因可能包含特殊字符,我建议您在字符串周围使用\Q
和\E
,因为它引用了两者之间的所有字符,(如果你真的很挑剔,请确保输入本身不包含\E
)。