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

Java中如何实现ASCII艺术字母的横向并排打印输出?

问题根源

你当前的实现逻辑是完整输出第一个字母的所有行内容后,再输出第二个字母的所有行,自然会上下排列,和字符类型、\r控制符都没有关系。

可行解决步骤

  • 第一步:提前将每个字母的风格化字符串按换行符分割,存储为行数组,每个数组元素对应该字母的一行内容。你示例中的A、B均为11行固定高度,分割后每个数组长度统一为11即可。
  • 第二步:处理用户输入的字符串时,先把所有输入字符对应的行数组提前取出。
  • 第三步:按行号从0到10依次遍历,每次将所有字母当前行号对应的字符串横向拼接后,统一输出这一整行,再换行即可。

Java示例代码

import java.util.*;

public class AsciiArtGenerator {
    // 提前把每个字母转成行数组存起来,这里示例放A和B
    private static final Map<Character, String[]> LETTER_ROWS = new HashMap<>();

    static {
        String asciiA = """
               █████████ 
              ███░░░░░███
             ░███    ░███
             ░███████████
             ░███░░░░░███
             ░███    ░███
             █████   █████
            ░░░░░   ░░░░░
                         
                         
                         """;
        // 按换行分割,存到map
        LETTER_ROWS.put('A', asciiA.split("\\R"));

        String asciiB = """
             ███████████
            ░░███░░░░░███
             ░███    ░███
             ░██████████
             ░███░░░░░███
             ░███    ░███
             ███████████
            ░░░░░░░░░░░ 
                        
                        
                        """;
        LETTER_ROWS.put('B', asciiB.split("\\R"));
    }

    public static void printAsciiText(String input) {
        // 先收集所有输入字符对应的行数组
        List<String[]> allLetterRows = new ArrayList<>();
        for (char c : input.toUpperCase().toCharArray()) {
            if (LETTER_ROWS.containsKey(c)) {
                allLetterRows.add(LETTER_ROWS.get(c));
            }
        }
        if (allLetterRows.isEmpty()) return;

        // 逐行拼接输出
        int totalLines = allLetterRows.get(0).length;
        for (int i = 0; i < totalLines; i++) {
            StringBuilder lineBuilder = new StringBuilder();
            for (String[] letter : allLetterRows) {
                // 拼接当前行的所有字母对应行内容
                lineBuilder.append(letter[i]);
            }
            System.out.println(lineBuilder);
        }
    }

    public static void main(String[] args) {
        // 测试输入AB
        printAsciiText("AB");
    }
}

注意事项

  • 要保证所有字母的行数组长度完全一致,避免出现错位问题
  • 如果字母宽度不同,也可以在拼接时按需加空格调整间距

内容的提问来源于stack exchange,提问作者Deniz Demir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:39:03