本文是《Java 入门指南》的第十一篇文章,介绍了 Java 的 Scanner 类。

Scanner 类

描述:

java.util.Scanner 是 Java 5 的新特性,用于接收用户的输入。

通过 Scanner 类的 hasNext()hasNextLine() 判断用户是否输入,通过 next()nextLine 接收用户的输入。

实例:

示例代码(hasNext()next()):

package com.jianrry.test;

//导入 java.util.Scanner 类。
import java.util.Scanner;

public class Test {

    public static void main(String[] args) {
        
        System.out.println("使用 next() 接收用户的输入");

        //创建一个 Scanner 对象,用于接收用户的输入。
        Scanner scanner=new Scanner(System.in);

        //使用 hasNext() 判断用户是否输入信息。
        if (scanner.hasNext()){

            //定义一个 String 类型的变量 str,用于接收用户输入的字符串。
            String str=scanner.next();

            System.out.println("用户输入的信息为:"+str);

        }

        //关闭 Scanner 对象,减少资源浪费。
        scanner.close();

    }

}

测试数据(hasNext()next()):

  Hello World!

运行结果(hasNext()next()):

使用 next() 接收用户的输入
  Hello World!
用户输入的信息为:Hello

示例代码(hasNextLine()nextLine()):

package com.jianrry.test;

//导入 java.util.Scanner 类。
import java.util.Scanner;

public class Test {

    public static void main(String[] args) {

        System.out.println("使用 nextLine() 接收用户的输入");

        //创建一个 Scanner 对象,用于接收用户的输入。
        Scanner scanner=new Scanner(System.in);

        //使用 hasNext() 判断用户是否输入信息。
        if (scanner.hasNextLine()){

            //定义一个 String 类型的变量 str,用于接收用户输入的字符串。
            String str=scanner.nextLine();

            System.out.println("用户输入的信息为:"+str);

        }

        //关闭 Scanner 对象,减少资源浪费。
        scanner.close();

    }

}

测试数据(hasNextLine()nextLine()):

  Hello World!

运行结果(hasNextLine()nextLine()):

使用 nextLine() 接收用户的输入
  Hello World!
用户输入的信息为:  Hello World!

示例代码(hasNextInt()nextInt()):

package com.jianrry.test;

//导入 java.util.Scanner 类。
import java.util.Scanner;

public class Test {

    public static void main(String[] args) {
        
        System.out.println("请输入整数或小数:");

        //创建一个 Scanner 对象,用于接收用户的输入。
        Scanner scanner=new Scanner(System.in);

        //使用 hasNextInt() 判断用户是否输入 int 类型的信息。
        if (scanner.hasNextInt()){

            //定义一个 int 类型的变量 i,用于接收用户输入的整数。
            int i=scanner.nextInt();

            System.out.println("输入的整数为:"+i);

        } else if(scanner.hasNextDouble()){

            //定义一个 double 类型的变量 d,用于接收用户输入的小数。
            double d=scanner.nextDouble();

            System.out.println("输入的小数为:"+d);

        } else {

            System.out.println("你输入的数据不合法!");

        }

        //关闭 Scanner 对象,减少资源浪费。
        scanner.close();

    }

}

测试数据(hasNextInt()nextInt()):

//测试数据1
2333

//测试数据2
3.1415926

//测试数据3
ABC

运行结果(hasNextInt()nextInt()):

//运行结果1
请输入整数或小数:
2333
输入的整数为:2333

//运行结果2
请输入整数或小数:
3.1415926
输入的小数为:3.1415926

//运行结果3
请输入整数或小数:
ABC
你输入的数据不合法!

示例代码(hasNextDouble()nextDouble()):

package com.jianrry.test;

//导入 java.util.Scanner 类。
import java.util.Scanner;

public class Test {

    public static void main(String[] args) {

        System.out.println("请输入数据:");

        //创建一个 Scanner 对象,用于接收用户的输入。
        Scanner scanner=new Scanner(System.in);

        double sum=0;

        int i=0;

        //使用 hasNextDouble() 判断用户是否输入 double 类型的信息。
        while (scanner.hasNextDouble()){

            //定义一个 double 类型的变量 d,用于接收用户输入的小数。
            double d=scanner.nextDouble();

            //等价于 sum+=d;
            sum=sum+d;

            //等价于 i++;
            i=i+1;

        }

        System.out.println("总和为:"+sum);

        System.out.println("平均数为:"+(sum/i));

        //关闭 Scanner 对象,减少资源浪费。
        scanner.close();

    }

}

测试数据(hasNextDouble()nextDouble()):

10
20
30
40
A

运行结果(hasNextDouble()nextDouble()):

请输入数据:
10
20
30
40
A
总和为:100.0
平均数为:25.0

区别:

next():

  1. 只有用户输入有效字符之后,才能结束。
  2. 有效字符之前的空白,会自动去掉。
  3. 有效字符之后的空白,会作为结束符,结束用户的输入。
  4. next() 不能得到有空白的字符串。

nextLine():

  1. 不要求用户输入有效字符,用户也可以输入空白,结束输入。
  2. 有效字符之前的空白,会保留。
  3. 有效字符之后的 Enter 键,会作为结束符,结束用户的输入。
  4. nextLine() 可以得到有空白的字符串。