Scanner类

Scanner类用以获取用户输入的信息,用户输入后,可使用next()和nextLine()进行接收。

使用next()

package com.cxf.scanner;

import java.util.Scanner;

public class Demo2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("使用next方式接收:");
        String str1 = scanner.next();

        System.out.println("next接收的内容为:");
        System.out.println(str1);

        scanner.close();
    }
}

输出及输出结果:

使用next方式接收:
hello world
next接收的内容为:
hello

输入了hello world ,输出却没有world,这是因为next()把空格视为终止。

使用nextLine()

package com.cxf.scanner;

import java.util.Scanner;

public class Demo3 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("使用nextLine方式接收:");
        String str2 = scanner.nextLine();

        System.out.println("nextLine接收的内容为:");
        System.out.println(str2);

        scanner.close();
    }
}

输入及输出结果:

使用nextLine方式接收:
hello world
nextLine接收的内容为:
hello world

与next()不同,nextLine()不把空格视为终止。

额外发现

起初试图把上述两个实验在同一个类里做掉:

package com.cxf.scanner;

import java.util.Scanner;

public class Demo1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("使用next方式接收:");
        String str1 = scanner.next();

        System.out.println("使用nextLine方式接收:");
        String str2 = scanner.nextLine();

        System.out.println("next接收的内容为:");
        System.out.println(str1);

        System.out.println("nextLine接收的内容为:");
        System.out.println(str2);

        scanner.close();
    }
}

输入及输出结果:

使用next方式接收:
hello world
使用nextLine方式接收:
next接收的内容为:
hello
nextLine接收的内容为:
 world

这是因为第10行next()接收了hello,从后面的空格开始就停止接收。

而从空格开始的这部分内容” world“并没有丢失。

第13行执行nextLine(),我预期他会再让我输入一次,但是没有,因为他识别并接收到了" world"。

那如果我只输入hello呢?按照道理nextLine()就识别不到新的信息,这样的话他会让我再输入一次吗?结果如下:

使用next方式接收:
hello
使用nextLine方式接收:
next接收的内容为:
hello
nextLine接收的内容为:

nextLine()接收到的内容为空。

因此我们只能输入一次,next()和nextLine()共用了这次输入。

如果从scanner入手呢?

package com.cxf.scanner;

import java.util.Scanner;

public class Demo1 {
    public static void main(String[] args) {
        Scanner scanner1 = new Scanner(System.in);
        Scanner scanner2 = new Scanner(System.in);

        System.out.println("scanner1接收:");
        String str1 = scanner1.next();

        System.out.println("scanner2接收:");
        String str2 = scanner2.nextLine();

        System.out.println("scanner1接收的内容为:");
        System.out.println(str1);

        System.out.println("scanner2接收的内容为:");
        System.out.println(str2);

        scanner1.close();
        scanner2.close();
    }
}

输入及输出结果:

scanner1接收:
hello world
scanner2接收:
hey you
scanner1接收的内容为:
hello
scanner2接收的内容为:
hey you

之前的代码中next()和nextLine()都属于同一个Scanner。

这次代码里让他们分属两个Scanner,分别为scanner1和scanner2,这时候他让我们进行了两次键盘输入。

因此可以推断,每个Scanner的第一个next或nextLine方法运行时,要求一次键盘输入。之后同一个Scanner再执行next或nextLine方法时,不会再要求输入,而是从第一次输入的内容里,剔除掉之前next方法接收了的部分,把剩下的部分作为这次next方法的输入。

posted on 2021-08-15 21:44  菜小疯  阅读(38)  评论(0编辑  收藏  举报