了解findWithinHorizo​​n输出

时间:2014-01-27 23:34:07

标签: 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 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()呢?它是将迭代器移动到下一个字符还是下一个字?如果是前者,结果中是否有单词(例如 )?

1 个答案:

答案 0 :(得分:0)

1)“复制”不存在的原因是因为Scanner.findWithinHorizon()也使令牌前进。 请参阅文档http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

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

因此,当发现“她”时,它会跳过原来的“复制”令牌。

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

3)“她”是从“她”中找到的。