Java 了解findWithinHorizon输出

Java 了解findWithinHorizon输出,java,string,java.util.scanner,Java,String,Java.util.scanner,在玩Scanner类时,我编写了这段代码来查看findWithinHorizon的行为,但是,我无法确切地解释为什么输出中缺少一些模式 import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.Scanner; public class Main { public static void main(String[] args) throws FileNotFoundE

在玩
Scanner
类时,我编写了这段代码来查看
findWithinHorizon
的行为,但是,我无法确切地解释为什么输出中缺少一些模式

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;


public class Main {

    public static void main(String[] args) throws FileNotFoundException {

        FileInputStream FS = new FileInputStream("dummy.txt");
        Scanner scanner = new Scanner(FS);
        int counter = 0;
        while (scanner.hasNext()) {
            counter++;
            String P = scanner.findWithinHorizon(scanner.next(),100);
            if (P!=null)
                System.out.println(counter+" "+P);
        }
    }
}
我的
dummy.txt
文件有以下文本:

在路上她遇到了一个复制品。副本警告小盲文说 从哪里来的话,它会被重写一千遍 从它的起源留下的一切都是“和”和“和” 小盲文应该掉头回到它自己的、安全的地方 国家

上面的代码打印出来

2 her
3 e
4 from
5 its
这很清楚。我不明白的是,为什么输出中没有单词copy?另外,在试图理解此方法的机制时,我意识到地平线实际上是字符数(来自Javadoc:无分隔符)。但是关于scanner.next()呢?它是否将迭代器移动到下一个字符或下一个单词?如果是前者,结果中如何包含单词(例如,her

1)之所以没有“复制”,是因为
Scanner.findWithinHorizon()
也会推进令牌。 见文件

“如果找到该模式,扫描仪将通过匹配的输入并返回匹配该模式的字符串。”

因此,当发现“她”时,它会跳过原始的“复制”标记

2)
Scanner.next()
将迭代器移动到下一个标记(默认情况下由“”删除)


3) “她”是从w“她”e中找到的

没有攻击,但我认为你关于
copy.
的论点是无效的
findWithinHorizon
忽略分隔符。正如你正确地提到的那样,这就像
hers
where
。我并没有完全测试出来,但我会尽力弄清楚