Java读取未知尺寸ASCII图像文本文件存入二维数组的实现问题
实现思路
因为提前不知道文件的行列数,我们可以分两步操作:
- 先逐行读取文件全部内容,存入字符串列表,此时列表的长度就是二维数组的行数
- 遍历所有行拿到最长行的字符数作为二维数组的列数,再把字符串逐字符转存到二维数组即可
修正后的完整代码
import java.io.File; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class AsciiImage { // 存储ASCII图像的二维字符数组 private char[][] arrayOfCharacters; public AsciiImage(String passFile) { List<String> lines = new ArrayList<>(); // 第一步:读取所有行 try (Scanner input = new Scanner(new File(passFile))) { while (input.hasNextLine()) { // 保留每行的完整内容,包括前置空格、特殊字符 lines.add(input.nextLine()); } } catch (FileNotFoundException e) { System.out.println("File not found"); // 异常处理逻辑可自行补充 return; } if (lines.isEmpty()) { arrayOfCharacters = new char[0][0]; return; } // 计算列数:取最长行的长度 int maxCol = 0; for (String line : lines) { if (line.length() > maxCol) { maxCol = line.length(); } } // 初始化二维数组 int rowNum = lines.size(); arrayOfCharacters = new char[rowNum][maxCol]; // 第二步:逐字符存入二维数组 for (int i = 0; i < rowNum; i++) { String line = lines.get(i); for (int j = 0; j < maxCol; j++) { // 短行不足的位置补空格,保持图像排版 arrayOfCharacters[i][j] = j < line.length() ? line.charAt(j) : ' '; } } } // 提供获取二维数组的方法 public char[][] getArrayOfCharacters() { return arrayOfCharacters; } }
代码说明
- 采用
try-with-resources语法自动关闭Scanner,不需要手动调用close() - 完整保留每行的所有字符,包括ASCII图像排版需要的空格、特殊符号
- 短行自动补空格对齐,保证二维数组每一行长度一致,避免后续访问下标越界
- 支持任意尺寸的ASCII图像TXT文件,不需要提前指定行列数
内容的提问来源于stack exchange,提问作者spock's-neurons
相关产品推荐
相关产品推荐

