You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java读取未知尺寸ASCII图像文本文件存入二维数组的实现问题

实现思路

因为提前不知道文件的行列数,我们可以分两步操作:

  1. 先逐行读取文件全部内容,存入字符串列表,此时列表的长度就是二维数组的行数
  2. 遍历所有行拿到最长行的字符数作为二维数组的列数,再把字符串逐字符转存到二维数组即可

修正后的完整代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:54:04