Java 是否将二维阵列打印为网格?(爪哇)

Java 是否将二维阵列打印为网格?(爪哇),java,arrays,Java,Arrays,在我一直从事的一个个人Java项目中,我遇到了一些难题。我想以表格的形式打印一个二维字符串数组。不是字符串本身,而是行和列标签(想想Microsoft Excel)。这就是我对成品的设想,用星号表示字符串应该放在哪里 | A | B | C | D | E | F | G | ----+---------+---------+---------+---------+---------+---------+

在我一直从事的一个个人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

偶数行都是
------+
的引入,后面是
------+
的列计数重复

奇数行(第一行除外)是
999 |
的引入,其中
999
是一个行号,右对齐,带前导空格。可以使用
printf()
String.format()
格式字符串
“%3d”

在引入项之后是字符串值的columnCount重复,经过修剪并居中对齐到9个字符,然后是
|

要将中心对齐到9个字符,请执行以下操作:

  • 如果长度>9,则修剪为9(是,使用
    substring()
  • 否则,计算所需的空间,即
    spacesTotal=9-trimmedLength

    计算左侧的空格:
    spaceBefore=spacesTotal/2

    计算右侧的空格:
    spaceAfter=spacesTotal-spaceBefore

    通过这样做,奇数个空格(如5)在前面变成2,在后面变成3。
    现在打印
    spaceBefore
    空格、(修剪过的)文本值,然后打印
    spaceAfter
    空格和
    |

假设不超过26列,第一行应该足够简单,即列名仅为
A
Z

偶数行都是
------+
的引入,后面是
------+
的列计数重复

奇数行(第一行除外)是
999 |
的引入,其中
999
是一个行号,右对齐,带前导空格。可以使用
printf()
String.format()
格式字符串
“%3d”

在引入项之后是字符串值的columnCount重复,经过修剪并居中对齐到9个字符,然后是
|

要将中心对齐到9个字符,请执行以下操作:

  • 如果长度>9,则修剪为9(是,使用
    substring()
  • 否则,计算所需的空间,即
    spacesTotal=9-trimmedLength

    计算左侧的空格:
    spaceBefore=spacesTotal/2

    计算右侧的空格:
    spaceAfter=spacesTotal-spaceBefore

    通过这样做,奇数个空格(如5)在前面变成2,在后面变成3。
    现在打印
    spaceBefore
    空格、(修剪过的)文本值,然后打印
    spaceAfter
    空格和
    |
公共静态无效printStringGrid(字符串[][]数组){
系统输出打印(“|”);
对于(int i=0;i
公共静态无效printStringGrid(字符串[][]数组){
系统输出打印(“|”);
对于(int i=0;i
请发布您的尝试。使用printf优先
public static void printStringGrid(String[][] array){
    System.out.print("    |");
    for (int i = 0; i < array[0].length; i++){
        System.out.print("    ");
        System.out.print((char)('A' + i));
        System.out.print("    |");
    }
    System.out.println();
    for (int i = 0; i < array.length; i++){
        System.out.print("----+");
        for (int j = 0; j < array[0].length; j++){
            System.out.print("---------+");
        }
        System.out.println();
        System.out.print("  " + (i + 1) + " |");
        for (int j = 0; j < array[0].length; j++){
            if (array[i][j].length() < 10){
                int spaces = (9 - array[i][j].length()) / 2;
                for (int k = 0; k < spaces; k++){
                    System.out.print(" ");
                }
                System.out.print(array[i][j]);
                for (int k = 0; k < (9 - array[i][j].length()) - spaces; k++){
                    System.out.print(" ");
                }
            }
            else{
                System.out.print(array[i][j].substring(0, 9));
            }
            System.out.print("|");
        }
        System.out.println();
    }
}