Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建Java程序以在文件中搜索特定单词_Java_Search_Java.util.scanner - Fatal编程技术网

创建Java程序以在文件中搜索特定单词

创建Java程序以在文件中搜索特定单词,java,search,java.util.scanner,Java,Search,Java.util.scanner,我正在学习这门语言,我想知道一个更有经验的Java程序员在以下情况下会做什么 我想创建一个java程序,在指定的文件中搜索特定单词的所有实例 你会怎么做呢,这个JavaAPI是附带了一个提供文件扫描功能的类,还是我必须编写自己的类来实现这一点 感谢您的任何意见, Dom。java API确实提供了一个类,允许您扫描输入文件 但是,根据您打算如何使用它,这可能不是最好的主意。文件很大吗?您是只搜索一个文件,还是试图保留一个包含多个文件的数据库并搜索其中的文件?在这种情况下,您可能希望使用更充实的引

我正在学习这门语言,我想知道一个更有经验的Java程序员在以下情况下会做什么

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

你会怎么做呢,这个JavaAPI是附带了一个提供文件扫描功能的类,还是我必须编写自己的类来实现这一点

感谢您的任何意见,

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-如何定义“非常大”?