
本文介绍使用 Java 的 BufferedReader 读取多行空格分隔的整数文本,并将其高效、安全地解析为 int[][] 二维数组的完整实现,包含健壮性处理与典型注意事项。
本文介绍使用 java 的 `bufferedreader` 读取多行空格分隔的整数文本,并将其高效、安全地解析为 `int[][]` 二维数组的完整实现,包含健壮性处理与典型注意事项。
在实际开发中,常需从文件或标准输入读取格式化文本(如每行一组空格分隔的整数),并构造成二维数值结构用于后续计算。例如,给定如下两行输入:
14 14 14 14 32 32 32 32
目标是得到一个 int[2][4] 数组:{{14,14,14,14}, {32,32,32,32}}。
以下是推荐的完整实现,采用 try-with-resources 确保资源自动关闭,并兼顾可扩展性(支持任意行数,不限于两行):
import java.io.*;
public int[][] convertTo2DArray(String filename) {
List<int> rows = new ArrayList();
try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
String line;
while ((line = reader.readLine()) != null) {
line = line.trim();
if (line.isEmpty()) continue; // 跳过空行
String[] tokens = line.split("\s+"); // 使用正则匹配任意空白符(空格/制表符等)
int[] row = new int[tokens.length];
for (int i = 0; i <p><strong>调用示例:</strong></p>
<pre class="brush:php;toolbar:false;">String path = "input.txt"; // 文件内容即上述两行整数
int[][] matrix = convertTo2DArray(path);
System.out.println(Arrays.deepToString(matrix));
// 输出:[[14, 14, 14, 14], [32, 32, 32, 32]]
✅ 关键注意事项:
-
避免硬编码行数:原问题仅含两行,但代码应具备通用性;使用 List
动态收集更安全; - 空格鲁棒性:使用 \s+ 替代 " " 可兼容多个空格、制表符等;
- 异常处理:对 Integer.parseInt() 包裹 try-catch,提供清晰错误定位;
- 空行跳过:trim() + isEmpty() 防止因空行导致 split 产生空字符串数组;
- 资源管理:try-with-resources 自动关闭 BufferedReader,杜绝资源泄漏;
- 返回值设计:若业务要求“必须为矩形数组”,可在循环后统一校验 rows 中各 row.length 是否一致。
该方案简洁、可维护、生产就绪,适用于配置文件解析、算法输入预处理等典型场景。











