我在我一直从事的个人 Java 项目中遇到了一些难题。我想以表格的形式打印二维字符串数组。不是字符串本身,而是带有行和列标签(想想 Microsoft Excel)。这就是我设想的成品,星号代表字符串应该去的地方。
| A | B | C | D | E | F | G |
----+---------+---------+---------+---------+---------+---------+---------+
1 | * | * | * | * | * | * | * |
----+---------+---------+---------+---------+---------+---------+---------+
2 | * | * | * | * | * | * | * |
----+---------+---------+---------+---------+---------+---------+---------+
3 | * | * | * | * | * | * | * |
----+---------+---------+---------+---------+---------+---------+---------+
4 | * | * | * | * | * | * | * |
----+---------+---------+---------+---------+---------+---------+---------+
5 | * | * | * | * | * | * | * |
----+---------+---------+---------+---------+---------+---------+---------+
6 | * | * | * | * | * | * | * |
----+---------+---------+---------+---------+---------+---------+---------+
7 | * | * | * | * | * | * | * |
----+---------+---------+---------+---------+---------+---------+---------+
8 | * | * | * | * | * | * | * |
----+---------+---------+---------+---------+---------+---------+---------+
9 | * | * | * | * | * | * | * |
----+---------+---------+---------+---------+---------+---------+---------+
10 | * | * | * | * | * | * | * |
----+---------+---------+---------+---------+---------+---------+---------+
我知道这将使用嵌套的前向循环,并且逻辑过程是将字符串值放入内部循环中,如“example[i][j]”类型格式。我只是很困惑如何以正确的格式围绕单元格进行设计,将每个字符串限制为 10 个字符,就像 Excel 在缩小时如何限制其单元格大小一样。我需要使用子字符串吗?我是否使用 printf 使第 10 行的间距正确?
非常感谢任何指点,我以前从未遇到过这样的困扰。
最佳答案
第一行应该很简单,假设您不超过 26 列,即列名称只是 A
到 Z
。
偶数行都是 ----+
的开头,后面是 --------+
的 columnCount 重复。
奇数行(第一行除外)是 999 |
的引入,其中 999
是行号,右对齐,带有前导空格。这可以通过 printf()
或 String.format()
以及格式字符串
来完成
“%3d |”
。
引入部分后面是一个字符串值的 columnCount 重复项,经过修剪并居中对齐到 9 个字符,后跟一个 |
。
要居中对齐 9 个字符,请执行以下操作:
- 如果长度 > 9,则修剪为 9(是的,使用
substring()
)。 - 否则,计算所需的空间,即
spacesTotal = 9 - trimmedLength
。
计算左侧空间:spaceBefore = spaceTotal/2
。
计算右侧空格:spaceAfter = spaceTotal - spaceBefore
。
通过这样做,奇数个空格(例如 5 个)会变成前面 2 个、后面 3 个。
现在打印spaceBefore
空格、(修剪后的)文本值,然后打印spaceAfter
空格和|
。
关于java - 将二维数组打印为网格? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35354875/