Java Scanner 类是Java的一个内置类,它提供了一种简便的方式来从标准输入或者文件中读取基本类型和字符串。本文将会详细介绍Java Scanner类的作用以及在实际工作中的用途。
Scanner 类的作用
Scanner类可以方便地读取从控制台、文件等输入流中读取基本类型和字符串。Scanner类可以读取int、long、float、double和String等基本类型。它还可以使用正则表达式读取符合模式的文本。
Scanner类有多种构造函数,可以接受多种类型的输入流,包括标准输入流(System.in)、文件输入流(FileInputStream)等。在构造Scanner对象时,可以指定字符集和语言环境,以支持不同的语言和字符集。
Scanner类提供了一系列的方法来读取不同类型的数据。例如,nextInt()可以读取一个整数,nextDouble()可以读取一个双精度浮点数,nextLine()可以读取一行文本等等。此外,Scanner类还提供了hasNext()和hasNextLine()等方法,用于检测是否还有更多的数据可以读取。
Scanner 类的示例代码
下面是Scanner类的一个简单示例代码,该代码从标准输入流中读取一个整数和一个字符串,并将它们输出到控制台。
import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个整数:");
int num = scanner.nextInt();
System.out.print("请输入一个字符串:");
String str = scanner.nextLine();
System.out.println("您输入的整数是:" + num);
System.out.println("您输入的字符串是:" + str);
scanner.close();
}
}
在上面的代码中,我们首先创建了一个Scanner对象,然后通过nextInt()方法读取了一个整数,接着通过nextLine()方法读取了一行文本。最后,我们将读取到的数据输出到控制台。
需要注意的是,在读取完整数后,下一次读取字符串时可能会出现问题。这是因为nextInt()方法只会读取整数值,而不会读取回车键后面的换行符。因此,当我们使用nextLine()方法时,它会读取到之前输入整数时的换行符,并返回一个空字符串。为了解决这个问题,我们可以在读取完整数后,使用一个额外的nextLine()方法来消费掉换行符。
Scanner 类是 Java 标准库中提供的一个用于扫描输入内容的类,可以从标准输入、文件、字符串等多种来源获取数据。Scanner 类提供了许多便捷的方法,可以读取不同类型的数据,并且可以设置定界符来控制数据的分隔方式。在实际工作中,Scanner 类经常被用于处理用户输入、解析文件和网络流等场景。
Scanner 类的使用方法
Scanner 类提供了多个构造函数,其中最常用的是将一个输入流作为参数的构造函数。下面是一个从标准输入中读取数据的示例代码:
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整数:");
int num = scanner.nextInt();
System.out.println("您输入的整数是:" + num);
System.out.println("请输入一个字符串:");
String str = scanner.next();
System.out.println("您输入的字符串是:" + str);
scanner.close();
}
}
在上面的示例代码中,我们首先创建了一个 Scanner 对象并传入标准输入流 System.in
,然后使用 nextInt()
方法读取一个整数,使用 next()
方法读取一个字符串,最后关闭了 Scanner 对象。
除了从标准输入流中读取数据外,Scanner 类还可以从文件、字符串等多种来源读取数据。下面是一个从文件中读取数据的示例代码:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
File file = new File("input.txt");
try {
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
在上面的示例代码中,我们首先创建了一个 File 对象,然后传入 Scanner 构造函数中。Scanner 会从文件中读取数据,并且使用 hasNextLine()
方法检查是否还有数据行,使用 nextLine()
方法读取一行数据。
Scanner 类的常用方法
Scanner 类提供了多个常用方法,用于读取不同类型的数据。下面是一些常用的方法及其用途:
next()
:读取字符串,遇到空格、制表符或换行符时结束。nextInt()
:读取整数,遇到非数字字符时结束。nextDouble()
:读取浮点数,遇到非数字字符时结束。nextBoolean()
:读取布尔值,只能读取 true 或 false。nextLine()
:读取一行数据,包括换行符在内。
除了上面这些方法外,Scanner 类还提供了一些其他的方法,例如 useDelimiter()
用于设置定界符,hasNext()
用于检查是否还有下一个值等等。
此外,Scanner 类还可以用于读取文件,非常适合读取简单的文本文件,比如配置文件、日志文件等。例如,下面的代码演示了如何使用 Scanner 读取文件内容并打印到控制台:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class FileScannerExample {
public static void main(String[] args) {
try {
File file = new File("example.txt");
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close();
} catch (FileNotFoundException e) {
System.out.println("File not found.");
e.printStackTrace();
}
}
}
上述代码中,首先创建一个 File 对象来表示要读取的文件。然后,创建一个 Scanner 对象,并将其初始化为从文件中读取输入。接下来,使用 while 循环逐行读取文件内容,直到到达文件末尾。在循环中,我们调用 nextLine() 方法获取每一行的文本内容,并将其打印到控制台。最后,关闭 Scanner 对象以释放资源。
在实际工作中,Scanner 类可以帮助我们读取各种不同类型的输入,包括从控制台读取用户输入,以及从文件、网络等其他来源读取输入。使用 Scanner 类可以简化我们的代码,提高代码的可读性和可维护性。