Java如何实现两个多行ASCII字符串横向并排打印输出
实现控制台并排打印两个ASCII字符画
直接顺序打印两个带换行的字符串时,控制台会先输出完第一个字符串的所有行,再输出第二个字符串的所有行,因此第二个图案会显示在第一个下方。要实现并排效果,核心逻辑是按行拆分两个字符串,逐行拼接对应行后再输出。
具体实现步骤
- 将两个字符串分别按换行符
\n拆分为行数组 - 取两个行数组的最大行数作为遍历上限,行数不足的一侧用空字符串占位,避免数组越界
- 遍历每一行索引,将A的当前行、固定间隔空格、B的当前行拼接为一整行后打印
可运行的完整代码
public class PrintSideBySide { public static void main(String[] args) { String A = " AAA \n" + " A:::A \n" + " A:::::A \n" + " A:::::::A \n" + " A:::::::::A \n" + " A:::::A:::::A \n" + " A:::::A A:::::A \n" + " A:::::A A:::::A \n" + " A:::::A A:::::A \n" + " A:::::AAAAAAAAA:::::A \n" + " A:::::::::::::::::::::A \n" + " A:::::AAAAAAAAAAAAA:::::A \n" + " A:::::A A:::::A \n" + " A:::::A A:::::A \n" + " A:::::A A:::::A \n" + "AAAAAAA AAAAAAA"; String B = "\nBBBBBBBBBBBBBBBBB \n" + "B::::::::::::::::B \n" + "B::::::BBBBBB:::::B \n" + "BB:::::B B:::::B\n" + " B::::B B:::::B\n" + " B::::B B:::::B\n" + " B::::BBBBBB:::::B \n" + " B:::::::::::::BB \n" + " B::::BBBBBB:::::B \n" + " B::::B B:::::B\n" + " B::::B B:::::B\n" + " B::::B B:::::B\n" + "BB:::::BBBBBB::::::B\n" + "B:::::::::::::::::B \n" + "B::::::::::::::::B \n" + "BBBBBBBBBBBBBBBBB "; // 按换行拆分两个字符串为行数组 String[] linesA = A.split("\n"); String[] linesB = B.split("\n"); // 计算最大行数,防止短字符串数组越界 int maxLineCount = Math.max(linesA.length, linesB.length); // 两个图案之间的空格间隔,可根据需要自行调整 int gapLength = 4; for (int i = 0; i < maxLineCount; i++) { // 取当前行内容,索引超出数组长度时用空串占位 String currentLineA = i < linesA.length ? linesA[i] : ""; String currentLineB = i < linesB.length ? linesB[i] : ""; // 拼接后打印 System.out.println(currentLineA + " ".repeat(gapLength) + currentLineB); } } }
注意事项
- 你当前定义的字符串B开头多了一个
\n,拆分后B的第一行为空串,运行时会和A的第一行对齐;如果不需要这个偏移,删掉B开头的\n即可。 - 代码中用到的
" ".repeat(gapLength)是Java 11及以上版本提供的方法,如果使用Java 8及更早版本,可以用如下方式生成间隔空格替换:
// 生成指定长度的空格串 StringBuilder gapBuilder = new StringBuilder(); for (int j = 0; j < gapLength; j++) { gapBuilder.append(" "); } String gapStr = gapBuilder.toString();
内容的提问来源于stack exchange,提问作者K31th
相关产品推荐
相关产品推荐

