如何让Java无需预设行列数即可读取任意txt文件中的二维数组?
无需预设行列数读取TXT中的二维数组解决方案
当然可以实现,核心思路是用动态集合先存储每一行的数据,不需要预先固定行列长度,最后再转成二维数组。下面是优化后的完整代码:
import java.io.File; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class GridReader { public static void main(String[] args) { File file = new File("C:\\Users\\sitar\\Desktop\\GridReader\\src\\2dArray.txt"); // 用动态集合存储每一行的数组,无需预设行数 ArrayList<int[]> rowList = new ArrayList<>(); // try-with-resources自动关闭Scanner,避免资源泄漏 try (Scanner sc = new Scanner(file)) { while (sc.hasNextLine()) { String line = sc.nextLine().trim(); // 跳过空行(可选,根据需求调整) if (line.isEmpty()) { continue; } // 按", "分割每行内容 String[] strElements = line.split(", "); int[] row = new int[strElements.length]; // 转成int数组 for (int i = 0; i < strElements.length; i++) { row[i] = Integer.parseInt(strElements[i]); } rowList.add(row); } } catch (FileNotFoundException e) { System.out.println("文件未找到:" + e.getMessage()); return; } catch (NumberFormatException e) { System.out.println("数据格式错误,包含非数字内容:" + e.getMessage()); return; } // 将集合转成二维int数组 int[][] array = rowList.toArray(new int[0][]); System.out.println("output:" + Arrays.deepToString(array)); } }
关键细节说明
- 动态存储行:
ArrayList<int[]>可以自动扩容,不管txt里有多少行都能容纳,完全不需要预先定义行数 - 自适应列数:每行读取后根据分割得到的元素个数创建对应长度的int数组,支持每行列数不同的情况
- 资源安全:使用try-with-resources语法,确保Scanner在使用后自动关闭,避免IO资源泄漏
- 异常处理:添加了文件未找到和数据格式错误的捕获,让程序更健壮
测试示例
如果你的txt内容是:
1, 2, 3 3, 4, 5 5, 6, 7, 8
程序会输出:
output:[[1, 2, 3], [3, 4, 5], [5, 6, 7, 8]]
内容的提问来源于stack exchange,提问作者TSit9642
相关产品推荐
相关产品推荐

