创建Java程序以在文件中搜索特定单词
我正在学习这门语言,我想知道一个更有经验的Java程序员在以下情况下会做什么 我想创建一个java程序,在指定的文件中搜索特定单词的所有实例 你会怎么做呢,这个JavaAPI是附带了一个提供文件扫描功能的类,还是我必须编写自己的类来实现这一点 感谢您的任何意见,创建Java程序以在文件中搜索特定单词,java,search,java.util.scanner,Java,Search,Java.util.scanner,我正在学习这门语言,我想知道一个更有经验的Java程序员在以下情况下会做什么 我想创建一个java程序,在指定的文件中搜索特定单词的所有实例 你会怎么做呢,这个JavaAPI是附带了一个提供文件扫描功能的类,还是我必须编写自己的类来实现这一点 感谢您的任何意见, Dom。java API确实提供了一个类,允许您扫描输入文件 但是,根据您打算如何使用它,这可能不是最好的主意。文件很大吗?您是只搜索一个文件,还是试图保留一个包含多个文件的数据库并搜索其中的文件?在这种情况下,您可能希望使用更充实的引
Dom。java API确实提供了一个类,允许您扫描输入文件
但是,根据您打算如何使用它,这可能不是最好的主意。文件很大吗?您是只搜索一个文件,还是试图保留一个包含多个文件的数据库并搜索其中的文件?在这种情况下,您可能希望使用更充实的引擎,例如。除非文件非常大,否则我会这样做
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
本身)。搜索不区分大小写吗?e、 g.“Cat”是否与“Cat”?grep-ioE”\bword\b“
”匹配?我们是否要指出IOUtils类来自?还要注意文件字符集编码问题!:-)若word包含一些特定于模式的元字符,请注意“正则表达式注入”。@Peter-如何定义“非常大”?