Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解Java中的扫描器_Java_Java.util.scanner - Fatal编程技术网

理解Java中的扫描器

理解Java中的扫描器,java,java.util.scanner,Java,Java.util.scanner,我试图理解java中的Scanner类,在一些示例中,我对下面两个程序的理解不明确,在逻辑上我看不到任何区别,但输出告诉我缺少了一些东西。请帮我做这个 public static void main(String args[]) { Scanner scanner1=new Scanner(System.in); String s=scanner1.nextLine(); scanner1.close(); // create a

我试图理解java中的Scanner类,在一些示例中,我对下面两个程序的理解不明确,在逻辑上我看不到任何区别,但输出告诉我缺少了一些东西。请帮我做这个

public static void main(String args[]) {
        Scanner scanner1=new Scanner(System.in);
        String s=scanner1.nextLine();
        scanner1.close();

        // create a new scanner with the specified String Object
        Scanner scanner = new Scanner(s);

       // print the next line
       System.out.println("" + scanner.nextLine());

       // check if there is a next line again
       System.out.println("" + scanner.hasNextLine());

       // print the next line
       System.out.println("" + scanner.nextLine());

       // check if there is a next line again
       System.out.println("" + scanner.hasNextLine());

       // close the scanner
       scanner.close();
       }
上面的程序正在打印下面的输出

Hello World! \n 3+3.0=6
Hello World! \n 3+3.0=6
false
而下面的程序,我看不出与上面有任何区别,是显示不同的输出

public static void main(String[] args) {

        String s="Hello World! \n 3 + 3.0 = 6";
        // create a new scanner with the specified String Object
        Scanner scanner = new Scanner(s);

       // print the next line
       System.out.println("" + scanner.nextLine());

       // check if there is a next line again
       System.out.println("" + scanner.hasNextLine());

       // print the next line
       System.out.println("" + scanner.nextLine());

       // check if there is a next line again
       System.out.println("" + scanner.hasNextLine());

       // close the scanner
       scanner.close();
       }
上述程序的输出为

Hello World!
true
3 + 3.0 = 6
false

我假设您在第一个代码片段中键入的是
helloworld\n 3+3.0=6
到标准输入。在这种情况下,“\n”不会被解析为新行(它被解析为字符“\”后跟字符“n”)。您必须在键入“Hello World!”后按enter按钮,以便扫描仪将输入分成两行

另一方面,当扫描仪从字符串中获取输入时,“\n”将被视为新行字符


哦,看来你的第一个片段中有一个拼写错误。我假设您使用的扫描仪从
系统中获取输入。
(您可能将两个代码片段的代码混淆了)。

如果在文件中写入了\n,则无法使用nextLine()[使用两个反斜杠,它将为您提供java.util.NoSuchElementException,因为没有\n(行尾)但是有\n(两个反斜杠)。 要读取文件并将文本中的\n替换为实际的EOL,可以使用sc.useDelimiter(\\n)作为新行,但这样可能会破坏扫描仪的某些方法的功能

Scanner s = new Scanner("Hello World! \\n 3 + 3.0 = 6");
s.useDelimiter("\\\\n");
System.out.println(s.next());
System.out.println(s.next()); 
将为您提供如下输出:

Hello World!
3 + 3.0 = 6

在第一个示例中,您使用的是
scanner1
,然后才是
scanner
。这是打字错误吗?在第一个示例中,我使用了两个scanner对象,一个是scanner 1,用于存储来自键盘的输入字符串,然后使用scanner对其进行解析。在第二个示例中,我直接在程序中硬编码输入字符串,而不是在运行时给出它(如第一个示例中)