Java编程中,Scanner
类是用于从各种输入源(如键盘、文件、字符串等)读取和解析原始类型和字符串的常用工具,它属于java.util
包,提供了多种方法来获取用户输入的数据,以下是关于如何在Java中使用Scanner
类进行输入和输出的详细指南。
导入与创建Scanner对象
要使用Scanner
类,首先需要导入java.util.Scanner
包,可以通过不同的构造方法创建Scanner
对象,具体取决于输入源的类型。
import java.util.Scanner; // 从标准输入流(键盘)创建Scanner对象 Scanner scanner = new Scanner(System.in); // 从文件创建Scanner对象 Scanner fileScanner = new Scanner(new File("input.txt")); // 从输入流创建Scanner对象 Scanner inputStreamScanner = new Scanner(new FileInputStream("input.txt")); // 从字符流创建Scanner对象 Scanner readerScanner = new Scanner(new FileReader("input.txt"));
Scanner类的主要方法
Scanner
类提供了多种方法来读取不同类型的数据,以下是一些常用的方法:
方法名 | 描述 |
---|---|
next() |
读取下一个完整的token,不包括空格 |
nextLine() |
读取一行文本,包括空格,以换行符为结束符 |
nextInt() |
读取下一个整数 |
nextDouble() |
读取下一个双精度浮点数 |
hasNext() |
检查是否还有下一个token |
hasNextLine() |
检查是否还有下一行文本 |
close() |
关闭Scanner对象,释放资源 |
使用Scanner读取数据
读取字符串
- 使用
next()
方法:该方法会跳过输入中的空白字符,然后读取下一个有效的token(即非空白字符序列)。
if (scanner.hasNext()) { String str = scanner.next(); System.out.println("输入的数据为:" + str); }
- 使用
nextLine()
方法:该方法会读取输入中的一整行文本,包括空格,直到遇到换行符为止。
if (scanner.hasNextLine()) { String str = scanner.nextLine(); System.out.println("输入的数据为:" + str); }
读取数值类型
在读取数值类型之前,最好先使用相应的hasNextXxx()
方法进行验证,以确保输入的数据类型正确。
- 读取整数:
if (scanner.hasNextInt()) { int i = scanner.nextInt(); System.out.println("整数数据:" + i); } else { System.out.println("输入的不是整数!"); }
- 读取浮点数:
if (scanner.hasNextDouble()) { double d = scanner.nextDouble(); System.out.println("浮点数数据:" + d); } else { System.out.println("输入的不是浮点数!"); }
循环读取多个数据
可以使用循环结构不断读取用户输入的数据,直到满足特定的终止条件为止,下面的代码演示了如何输入多个数字,并计算它们的总和与平均值:
System.out.println("请输入数字:"); double sum = 0; int count = 0; while (scanner.hasNextDouble()) { double num = scanner.nextDouble(); sum += num; count++; } System.out.println(count + "个数的和为" + sum); System.out.println(count + "个数的平均值是" + (sum / count));
格式化输出
除了基本的print
和println
方法外,Java还提供了printf
方法来进行格式化输出。printf
方法允许你指定输出的格式,类似于C语言中的printf
函数。
double amount = 12618.98; double interestRate = 0.0013; double interest = amount interestRate; System.out.printf("Interest is $%.2fn", interest); // 输出:Interest is $16.40
关闭Scanner对象
在使用完Scanner
对象后,应该调用close()
方法来关闭它,以释放相关的资源,这是一个良好的编程习惯,可以避免资源泄漏等问题。
scanner.close();
示例代码
下面是一个完整的示例程序,展示了如何使用Scanner
类从键盘读取用户输入的数据,并进行简单的计算和格式化输出:
import java.util.Scanner; public class ScannerExample { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入你的名字:"); String name = scanner.nextLine(); // 使用nextLine()读取包含空格的字符串 System.out.print("请输入你的年龄:"); if (scanner.hasNextInt()) { int age = scanner.nextInt(); System.out.println("你好," + name + "!你今年" + age + "岁。"); } else { System.out.println("输入的年龄不是有效的整数!"); } scanner.close(); // 关闭Scanner对象 } }
FAQs
Q1: 为什么在使用Scanner
读取输入时会遇到InputMismatchException
异常?
A1: InputMismatchException
异常通常发生在尝试将输入的数据转换为不兼容的类型时,如果期望输入一个整数,但用户输入了一个非数字的字符串,就会抛出此异常,为了避免这种情况,应该在读取数据之前使用相应的hasNextXxx()
方法进行验证,确保输入的数据类型与预期相符。
Q2: 如何从文件中读取数据并使用Scanner
进行处理?
A2: 要从文件中读取数据并使用Scanner
进行处理,可以创建一个File
对象或FileInputStream
对象作为输入源,然后将其传递给Scanner
的构造函数。
import java.io.File; import java.util.Scanner; public class FileScannerExample { public static void main(String[] args) { try { File file = new File("input.txt"); Scanner scanner = new Scanner(file); while (scanner.hasNextLine()) { String line = scanner.nextLine(); System.out.println("读取到的行:" + line); } scanner.close(); // 关闭Scanner对象 } catch (FileNotFoundException e) { System.out.println("文件未找到!"); e.printStackTrace(); } } }
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/49704.html