Java如何将TXT文件内容存入二维矩阵并保持原有格式输出
实现方案
1. 问题说明
当前代码已正确完成数据存矩阵的逻辑,输出格式不符合预期的原因是Arrays.deepToString()默认采用带方括号、逗号分隔的格式化规则,只需自定义遍历打印逻辑即可实现目标输出效果。原读取代码存在两处可优化点:
- 硬编码行列数灵活性差,可适配任意行列数的矩阵文件
- 原文件读取代码中
new FileReader("m")错误把变量名写成了字符串,需要修正
2. 完整实现代码
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class MatrixReader { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("Path to file: "); String filePath = sc.nextLine(); sc.close(); List<int[]> matrixList = new ArrayList<>(); // 用try-with-resources自动关流,避免资源泄漏 try (BufferedReader br = new BufferedReader(new FileReader(filePath))) { String line; // 逐行读取并存入集合,适配任意行列数的矩阵 while ((line = br.readLine()) != null) { // 跳过空行 if (line.trim().isEmpty()) continue; // 适配多个空格分隔的场景 String[] numStrs = line.trim().split("\\s+"); int[] row = new int[numStrs.length]; for (int i = 0; i < numStrs.length; i++) { row[i] = Integer.parseInt(numStrs[i]); } matrixList.add(row); } } catch (IOException e) { e.printStackTrace(); return; } // 集合转二维数组,方便后续转置等操作 int[][] matrix = matrixList.toArray(new int[0][]); // 自定义打印,匹配目标输出格式 System.out.println("matrix"); for (int[] row : matrix) { for (int i = 0; i < row.length; i++) { System.out.print(row[i]); if (i != row.length - 1) { System.out.print(" "); } } System.out.println(); } } }
3. 矩阵转置实现(适配后续需求)
后续需要做矩阵转置操作时,可直接基于上述代码得到的matrix二维数组实现,示例如下:
int rows = matrix.length; int cols = matrix[0].length; int[][] transposedMatrix = new int[cols][rows]; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { transposedMatrix[j][i] = matrix[i][j]; } }
内容的提问来源于stack exchange,提问作者Anket.
相关产品推荐
相关产品推荐

