提问人:Robert Page 提问时间:4/29/2021 最后编辑:PshemoRobert Page 更新时间:4/29/2021 访问量:107
scanner.skip(pattern) 为 String 和 File 提供 Exception,但不为 System.in
scanner.skip(pattern) gives Exception for String and File but not for System.in
问:
import java.io.*;
import java.util.*;
class Main{
public static void main(String[] args) throws Exception {
File f = new File("x.txt"); //x.txt has "xxx"
String x = "xxx";
//Scanner s = new Scanner(System.in);
Scanner s = new Scanner(f);
//Scanner s = new Scanner(x);
s.skip("g");
System.out.println(s.nextLine());
}
}
如果从 File 或 String 读取,则如果 pattern 在当前光标位置不匹配,则会被抛出。java.util.NoSuchElementException
但是,如果没有,如果图案在当前光标位置不匹配,则会引发异常。相反,光标只是不断跳过输入。为什么?System.in
答:
1赞
DuncG
4/29/2021
#1
对于 File 和 String,您的输入将终止,而如果您在控制台中键入更多字符,则 System.in 会持续向 Scanner 提供数据。
如果它被终止,您可以看到与 System.in 相同的结果。此示例提供了一组固定的值,用于 System.in Java 进程,以便读取流的结尾,您将获得:java.util.NoSuchElementException
echo xxx | java -cp your.jar Main
评论
0赞
Pshemo
5/1/2021
只是为了添加 IMO 核心方面。 不只是处理单个令牌,例如实例方法。 方法可以处理整个文本,这就是为什么在正则表达式不匹配的情况下,扫描程序不会假设它根本不匹配。相反,它希望通过等待整个数据(直到数据源结束/关闭)来做出决定。虽然从理论上讲,它可以进行优化,例如,当正则表达式具有明显的最大长度时,这种优化不包括在正则表达式/跳过方法中。skip
next
skip
skip("abc")
评论