Scanner类

Java为我们提供了一个Scanner工具类,我们可以使用其获取用户的输入,java.util.Scanner是Java5的新特性,我们可以通过Scanner类来获取用户的输入。

创建Scanner对象的基本语法为:
Scanner scanner = new Scanner(System.in);

我们可以通过Scanner类的next()nextLine()方法来获取输入的字符串,在读取前我们一般需要使用hasNext()hasNextLine()方法来判断是否还有输入的数据。

next()方法

//创建扫描器对象 用于接收键盘数据
Scanner scanner = new Scanner(System.in);

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

//判断是否还有输入
if (scanner.hasNext()) {
    //获取输入字符串
    String str = scanner.next();
    System.out.println("输入的内容为:" + str);
}

//关闭Scanner输入流
scanner.close();

这里我们输入hello world!,发现程序输出hello,并不是我们输入的全部字符。

nextLine()方法

//创建扫描器对象 用于接收键盘数据
Scanner scanner = new Scanner(System.in);

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

//判断是否还有输入
if (scanner.hasNextLine()) {
    //获取输入数据
    String str = scanner.nextLine();
    System.out.println("输入的内容:" + str);
}

//关闭Scanner输入流
scanner.close();

这里我们也输入hello world!,发现程序输出也是hello world!


next()和nextLine()的区别

next():

  • 一定要读取到有效字符后才可以结束输入。
  • 对输入有效字符之前遇到的空白,next()方法会自动将其去掉。
  • 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
  • next()不能得到完整的带有空格的字符串。

nextLine():

  • 以Enter键作为结束符,就是说nextLine()方法就是返回输入回车键之前的所有字符。
  • nextLine()可以获取带有空格的字符串。

其实在Scanner类中,还有很多获取专门数据的方法,如下:

java中有类似encodeURIComponent的方法嘛 java除了scanner 之外还有什么_System


这些方法的套路一般都是使用nextXxx()来读取,但是在使用其之前最好先使用hasNextXxx()对其进行输入数据进行验证。

还是程序为例:

//创建扫描器对象 用于接收键盘数据
Scanner scanner = new Scanner(System.in);

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

//判断输入的数据
if (scanner.hasNextInt()) {
    //获取输入的数据
    int a = scanner.nextInt();
    System.out.println("你输入的整数为:" + a);
} else {
    System.out.println("你输入的不是整数!");
}

//关闭输入流
scanner.close();

当我们输入的数据为整数时,就会输出你输入的整数为:(输入的整数),否则输出你输入的不是整数!,上面的程序就验证了上述的方法之一,其余方法同理。

在此,我们对于Scanner类必须要注意的是,我们在使用完Scanner类后,我们一定要将其关闭,因为它是属于IO(input输入和output输出)流的类,凡是属于IO流的类,如果我们使用完后不将其关闭,它就会一直占用资源,所以我们一定要养成用完就关闭的习惯。

下面展示一个Scanner类的例子:

package cn.ara.scanner;

import java.util.Scanner;

//通过获取键盘输入的数据,每输入一个数字用回车确认
//通过输入非数字来结束输入,最后计算其输入的平均值,并将平均值输出
public class Average {

    public static void main(String[] args) {
        //获取Scanner输入对象
        Scanner scanner = new Scanner(System.in);

        //输入数据总和
        double sum = 0;
        //记录输入数
        int count = 0;

        while (scanner.hasNextDouble()) {

            //获取输入的数据
            double input = scanner.nextDouble();

            //将输入的数据求和
            sum += input;
            //记录输入数个数
            count++;
        }

        System.out.println(count + "个数据的总和为:" + sum);

        //计算平均值
        double ave = sum / count;
        System.out.println("这些数据的平均值为:" + ave);

        //关闭输入流
        scanner.close();
    }

}