引言
在Java编程中,Scanner
类是处理输入的常用工具,它属于java.util
包。Scanner
类可以解析原始类型和字符串的简单文本扫描器,支持从键盘、文件、网络等多种输入源读取数据。本文将详细介绍Scanner
类的使用情况、构造方法,并提供一系列实践练习题。
Scanner类的构造方法
Scanner
类提供了多种构造方法,以下是一些常用的构造方法及其使用情况:
1. Scanner(System.in)
这是最常用的构造方法,用于从标准输入流(键盘)创建Scanner
对象。
Scanner scanner = new Scanner(System.in);
2. Scanner(File source)
从文件创建Scanner
对象。
Scanner scanner = new Scanner(new File("input.txt"));
3. Scanner(InputStream source)
从输入流创建Scanner
对象。
Scanner scanner = new Scanner(new FileInputStream("input.txt"));
4. Scanner(Reader source)
从字符流创建Scanner
对象。
Scanner scanner = new Scanner(new FileReader("input.txt"));
5. Scanner(File source, String charsetName)
从文件创建Scanner
对象,并指定字符集。
Scanner scanner = new Scanner(new File("input.txt"), "UTF-8");
6. Scanner(InputStream source, String charsetName)
从输入流创建Scanner
对象,并指定字符集。
Scanner scanner = new Scanner(new FileInputStream("input.txt"), "UTF-8");
7. Scanner(Reader source, String charsetName)
从字符流创建Scanner
对象,并指定字符集。
Scanner scanner = new Scanner(new FileReader("input.txt"), "UTF-8");
8. Scanner(InputStream source, String charsetName, boolean close)
从Java 9开始,可以在创建Scanner
对象时指定是否在Scanner
关闭时关闭输入流。
Scanner scanner = new Scanner(new FileInputStream("input.txt"), "UTF-8", true);
Scanner类的主要方法
Scanner
类提供了多种方法来读取不同类型的数据:
next()
:读取下一个完整的token。nextLine()
:读取一行文本。nextInt()
:读取下一个整数。nextDouble()
:读取下一个双精度浮点数。findInLine(Pattern pattern)
:返回与给定正则表达式匹配的输入的第一个匹配项。hasNext()
:检查是否还有下一个token。
关闭Scanner
使用完Scanner
对象后,应该关闭它来释放资源:
scanner.close();
练习题
练习1:基本输入
编写一个程序,使用Scanner
从键盘读取一个字符串和一个整数,并输出它们的和。
import java.util.Scanner;
public class BasicInput {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个字符串:");
String str = scanner.nextLine();
System.out.print("请输入一个整数:");
int num = scanner.nextInt();
System.out.println("字符串长度:" + str.length() + ",整数:" + num);
scanner.close();
}
}
练习2:文件读取
编写一个程序,使用Scanner
从文件中读取所有行,并输出到控制台。
import java.io.File;
import java.util.Scanner;
public class FileRead {
public static void main(String[] args) {
File file = new File("input.txt");
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
scanner.close();
}
}
练习3:模式匹配
编写一个程序,使用Scanner
从键盘读取输入,并找出所有数字。
import java.util.Scanner;
import java.util.regex.Pattern;
public class PatternMatch {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入文本:");
String input = scanner.nextLine();
Pattern pattern = Pattern.compile("\\d+");
for (String number : pattern.split(input)) {
if (pattern.matcher(number).matches()) {
System.out.println(number);
}
}
scanner.close();
}
}
练习4:温度转换
编写一个程序,使用Scanner
从键盘读取摄氏温度,然后将其转换为华氏温度并输出。
import java.util.Scanner;
public class TemperatureConversion {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入摄氏温度:");
double celsius = scanner.nextDouble();
double fahrenheit = (celsius * 9 / 5) + 32;
System.out.println(celsius + "°C 等于 " + fahrenheit + "°F");
scanner.close();
}
}
练习5:异常处理
编写一个程序,使用Scanner
从键盘读取输入,并处理可能的输入错误。
import java.util.InputMismatchException;
import java.util.Scanner;
public class ExceptionHandling {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个整数:");
try {
int num = scanner.nextInt();
System.out.println("输入的整数是:" + num);
} catch (InputMismatchException e) {
System.out.println("输入错误,请输入一个整数!");
}
scanner.close();
}
}
练习6:循环输入,满足一定条件时结束程序
使用Scanner
类在一个循环中不断读取用户输入的数据,并检查是否满足特定的终止条件。如果满足条件,则终止循环;如果不满足,则继续读取下一条数据。
import java.util.Scanner;
public class DataEntry {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数据,输入'exit'时终止录入:");
while (true) {
System.out.print("请输入:");
String input = scanner.nextLine();
// 检查是否满足终止条件,这里以输入"exit"为终止条件
if ("exit".equals(input)) {
System.out.println("终止录入。");
break; // 终止循环
}
// 在这里处理输入的数据
System.out.println("您输入的数据是:" + input);
}
scanner.close();
}
}
结语
通过上述内容,我们详细介绍了Scanner
类的构造方法、主要方法以及如何使用这些方法来读取不同类型的数据。通过提供的练习题,读者可以进一步加深对Scanner
类的理解。Scanner
类是Java中处理输入的重要工具,掌握它对于Java编程是非常重要的。希望这篇文章能够帮助你更好地理解和使用Scanner
类。