Java中的扫描器类
Scanner 是Java.util 包中的一个类,用于获取 int、double 等基本类型和字符串的输入。这是在Java程序中读取输入的最简单方法,但如果您想要一种输入法用于时间是一种限制的场景,例如在竞争性编程中,它不是很有效。
- 要创建 Scanner 类的对象,我们通常传递预定义的对象 System.in,它表示标准输入流。如果我们想从文件中读取输入,我们可以传递一个 File 类的对象。
- 要读取某个数据类型 XYZ 的数值,要使用的函数是 nextXYZ()。例如,要读取一个 short 类型的值,我们可以使用 nextShort()
- 要读取字符串,我们使用 nextLine()。
- 要读取单个字符,我们使用 next().charAt(0)。 next()函数将输入中的下一个标记/单词作为字符串返回,而 charAt(0)函数返回该字符串中的第一个字符。
让我们看一下读取各种数据类型数据的代码片段。
// Java program to read data of various types using Scanner class.
import java.util.Scanner;
public class ScannerDemo1
{
public static void main(String[] args)
{
// Declare the object and initialize with
// predefined standard input object
Scanner sc = new Scanner(System.in);
// String input
String name = sc.nextLine();
// Character input
char gender = sc.next().charAt(0);
// Numerical data input
// byte, short and float can be read
// using similar-named functions.
int age = sc.nextInt();
long mobileNo = sc.nextLong();
double cgpa = sc.nextDouble();
// Print the values to check if the input was correctly obtained.
System.out.println("Name: "+name);
System.out.println("Gender: "+gender);
System.out.println("Age: "+age);
System.out.println("Mobile Number: "+mobileNo);
System.out.println("CGPA: "+cgpa);
}
}
输入 :
Geek
F
40
9876543210
9.9
输出 :
Name: Geek
Gender: F
Age: 40
Mobile Number: 9876543210
CGPA: 9.9
有时,我们必须检查我们读取的下一个值是否属于某种类型,或者输入是否已经结束(遇到 EOF 标记)。
然后,我们在 hasNextXYZ() 函数的帮助下检查扫描仪的输入是否是我们想要的类型,其中 XYZ 是我们感兴趣的类型。如果扫描仪具有该类型的令牌,该函数返回 true,否则返回 false。例如,在下面的代码中,我们使用了 hasNextInt()。要检查字符串,我们使用 hasNextLine()。同样,要检查单个字符,我们使用 hasNext().charAt(0)。
让我们看一下从控制台读取一些数字并打印它们的平均值的代码片段。
// Java program to read some values using Scanner
// class and print their mean.
import java.util.Scanner;
public class ScannerDemo2
{
public static void main(String[] args)
{
// Declare an object and initialize with
// predefined standard input object
Scanner sc = new Scanner(System.in);
// Initialize sum and count of input elements
int sum = 0, count = 0;
// Check if an int value is available
while (sc.hasNextInt())
{
// Read an int value
int num = sc.nextInt();
sum += num;
count++;
}
int mean = sum / count;
System.out.println("Mean: " + mean);
}
}
输入:
101
223
238
892
99
500
728
输出:
Mean: 397