
本文讲解如何将行优先定义的二维字符串数组(如 [["cat","dog","mouse"],["chair","bench","stool"]])按列对齐、转置输出,实现每行显示各子数组对应索引元素,并通过 printf 精确控制列宽与对齐。
本文讲解如何将行优先定义的二维字符串数组(如 [["cat","dog","mouse"],["chair","bench","stool"]])按列对齐、转置输出,实现每行显示各子数组对应索引元素,并通过 `printf` 精确控制列宽与对齐。
默认的嵌套 for 循环按行遍历(先遍历外层数组,再遍历内层数组),输出结果为连续一行或逐行展开,无法满足“横向对齐、纵向分组”的排版需求。要实现目标格式:
cat chair dog bench mouse stool
关键在于转置遍历逻辑:外层循环应遍历列索引(即第一个子数组的长度),内层循环遍历行索引(即外层数组的长度)。这样每次外层迭代对应输出“第 i 列的所有元素”,从而自然形成目标结构。
以下是正确实现代码:
String[][] myList = {{"cat", "dog", "mouse"}, {"chair", "bench", "stool"}};
// 外层:遍历列(假设所有子数组等长,取 myList[0].length 安全)
for (int i = 0; i < myList[0].length; i++) {
// 内层:遍历行(即每个子数组)
for (int j = 0; j < myList.length; j++) {
// %-8s 表示左对齐、最小宽度 8 字符,自动补空格
System.out.printf("%-8s", myList[j][i]);
}
System.out.println(); // 每列输出完毕后换行
}✅ 核心要点说明:
立即学习“Java免费学习笔记(深入)”;
-
myList[0].length获取列数(此处为 3),避免硬编码;若子数组长度不一,需额外校验边界(如i )。 -
%-8s是格式化关键:%开始,-表示左对齐,8指定最小字段宽度,s表示字符串;不足时右侧补空格,确保列对齐。 - 不推荐使用
System.out.print(myList[j][i] + "\t"),因制表符\t在不同环境宽度不稳定,易导致错位。
⚠️ 注意事项:
- 此方案要求二维数组为“矩形”(各子数组长度一致),否则运行时可能抛出
ArrayIndexOutOfBoundsException;生产环境中建议先校验myList != null && myList.length > 0及各myList[j] != null。 - 若需首字母大写(如题目中示例显示 “Cat” 而非 “cat”),可在打印前调用
Character.toUpperCase(myList[j][i].charAt(0)) + myList[j][i].substring(1)处理,但原始数据本身为小写,此属额外业务逻辑。
该方法简洁高效,无需引入额外类库,适用于教学、调试及轻量级格式化输出场景。



















