java怎么输出scanner
- 后端开发
- 2025-07-08
- 4
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("输入的不是浮点数!"); }
循环读取多个数据
可以使用循环结构不断读取用户输入的数据,直到满足特定的终止条件为止,下面的代码演示了如何输入多个数字,并计算它们的总和与平均值:

格式化输出
除了基本的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(); } } }
