当使用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()
呢?它是将迭代器移动到下一个字符还是下一个字?如果是前者,结果中是否有单词(例如 她 )?
答案 0 :(得分:0)
1)“复制”不存在的原因是因为Scanner.findWithinHorizon()
也使令牌前进。
请参阅文档http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html
“如果找到模式,扫描仪将超过匹配的输入并返回与模式匹配的字符串。”
因此,当发现“她”时,它会跳过原来的“复制”令牌。
2)Scanner.next()
将迭代器移动到下一个标记(默认情况下由“”删除)。
3)“她”是从“她”中找到的。