
在java编程中,经常需要从外部文件读取结构化数据。一个常见的场景是,文件首行包含一个整数n,表示后续将有n行数据,每行数据包含固定数量(例如两个)的整数,这些整数需要被存储到一个二维数组中。例如,输入文件可能如下所示:
4 2 2 1 3 4 7 3 4
这里,4表示后续有4行数据,每行包含两个整数。我们的目标是将(2,2)存入array[0][0]和array[0][1],将(1,3)存入array[1][0]和array[1][1],依此类推。
初学者在处理这类问题时,常会遇到以下两个主要误区:
Java的Scanner类提供了强大的文本解析能力。对于以空格分隔的整数,Scanner的nextInt()方法能够自动跳过分隔符(包括空格、制表符、换行符等)并读取下一个整数,这极大地简化了数据解析过程。
以下是解决上述问题的正确且高效的代码实现:
立即学习“Java免费学习笔记(深入)”;
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
public class DataReader {
public static void main(String[] args) {
// 假设输入文件名为 "input.txt"
File inputFile = new File("input.txt");
Scanner scan = null;
try {
scan = new Scanner(inputFile);
// 1. 读取第一行,获取数据行数N
int numRows = scan.nextInt();
// 2. 正确初始化二维数组
// 每行固定有2个整数,所以列数为2
int[][] dataArray = new int[numRows][2];
// 3. 循环读取后续N行数据并填充数组
for (int i = 0; i < numRows; i++) {
for (int j = 0; j < dataArray[i].length; j++) { // 每行读取2个整数
dataArray[i][j] = scan.nextInt();
}
}
// 打印数组内容以验证读取结果
System.out.println("成功读取数据并填充二维数组:");
for (int i = 0; i < numRows; i++) {
for (int j = 0; j < dataArray[i].length; j++) {
System.out.print(dataArray[i][j] + " ");
}
System.out.println();
}
} catch (FileNotFoundException e) {
System.err.println("错误:文件未找到 - " + e.getMessage());
} finally {
if (scan != null) {
scan.close(); // 确保关闭Scanner资源
}
}
}
}代码解析:
try (Scanner scan = new Scanner(inputFile)) {
// ... 文件读取逻辑 ...
} catch (FileNotFoundException e) {
System.err.println("错误:文件未找到 - " + e.getMessage());
}通过本教程,我们学习了如何利用Java Scanner类高效、准确地从结构化文本文件中读取数据并填充到二维数组中。关键在于正确定义二维数组的维度,并充分利用Scanner的nextInt()方法自动解析整数token的特性,避免了不必要的字符串操作,使代码更加简洁、健壮。掌握这种方法,将有助于更有效地处理各种文件输入任务。
以上就是Java中高效读取结构化文本数据并填充二维数组指南的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号