繁体   English   中英

scanner.skip(pattern) 为 String 和 File 提供异常,但对 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());
    }
}

在从文件或字符串读取的情况下,如果当前java.util.NoSuchElementException position 的模式不匹配,则会引发 java.util.NoSuchElementException。

但是在System.in的情况下,如果当前 cursor position 的模式不匹配,则不会引发异常。 相反,cursor 只是不断跳过输入。 为什么?

在 File 和 String 的情况下,您的输入被终止,而 System.in 如果您在控制台中键入更多字符,则会不断向 Scanner 提供数据。

如果 System.in 终止,您可以看到相同的结果。 此示例为 java 进程提供一组固定的 System.in 值,以便读取 stream 的结尾,您将获得java.util.NoSuchElementException

echo xxx | java -cp your.jar Main

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM