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
相关产品推荐
相关产品推荐

