📜  Java之Scanner类

📅  最后修改于: 2020-03-24 12:45:24             🧑  作者: Mango

Scanner是java.util包中的一个类,用于获取基本类型(如int,double等)和字符串的输入。这是在Java程序中读取输入的最简单方法,但是如果您想在竞争性编程等时间受限制的情况下使用输入法,这种方法效率不高。

  • 为了创建Scanner类的对象,我们通常传递预定义的对象System.in,该对象代表标准输入流。如果我们想从文件中读取输入,我们可以传递File类的对象。
  • 要读取某个数据类型XYZ的数值,要使用的函数是nextXYZ()。例如,要读取short类型的值,我们可以使用nextShort()。
  • 要读取字符串,我们使用nextLine()。
  • 要读取单个字符,我们使用next().charAt(0)。next()函数以字符串形式返回输入中的下一个标记/单词,而charAt(0)函数返回该字符串中的第一个字符。

让我们看一下读取各种数据类型的数据的代码片段。

// Java展示Scanner类.
import java.util.Scanner;
public class ScannerDemo1
{
    public static void main(String[] args)
    {
        //  声明对象
        Scanner sc = new Scanner(System.in);
        // String输入
        String name = sc.nextLine();
        // Character输入
        char gender = sc.next().charAt(0);
        // 数据输入
        // byte, short和float可使用相似的方法读取
        int age = sc.nextInt();
        long mobileNo = sc.nextLong();
        double cgpa = sc.nextDouble();
        //打印输入.
        System.out.println("名字: "+name);
        System.out.println("性别: "+gender);
        System.out.println("年龄: "+age);
        System.out.println("电话: "+mobileNo);
        System.out.println("温度: "+cgpa);
    }
}

输入:

芒果
F
40
9876543210
9.9

输出:

名字: 芒果
性别: F
年龄: 40
电话: 9876543210
温度: 9.9

有时,我们必须检查读取的下一个值是否是某种类型或输入是否已结束(遇到了EOF标记)。
然后,借助hasNextXYZ()函数(其中XYZ是我们感兴趣的类型),我们检查Scanner的输入是否为所需类型。如果Scanner具有该类型的令牌,则该函数返回true,否则返回false。例如,在下面的代码中,我们使用了hasNextInt()。要检查字符串,我们使用hasNextLine()。同样,要检查单个字符,我们使用hasNext().charAt(0)。
让我们看一下代码片段,从控制台读取一些数字并打印其均值。

// Java使用Scanner从控制台读取输入
import java.util.Scanner;
public class ScannerDemo2
{
    public static void main(String[] args)
    {
        // 声明Scanner对象
        Scanner sc = new Scanner(System.in);
        // 初始化sum和count
        int sum = 0, count = 0;
        // 检查是否Int为可用
        while (sc.hasNextInt())
        {
            // 读取int
            int num = sc.nextInt();
            sum += num;
            count++;
        }
        int mean = sum / count;
        System.out.println("均值: " + mean);
    }
}

输入:

101
223
238
892
99
500
728

输出:

均值: 397