如何在Java中动态格式化字符串

时间:2017-10-05 21:26:14

标签: java string formatting

以下程序打印用户给出N的乘法表9xN。我的细胞被固定,只有当产品长2个时才对齐。

我可以做什么,以便细胞与任何大小的数字对齐?

    public static void main(String[] args) {

    //Reading the number n.
    System.out.print("Give a number: ");
    int n = StdIn.readInt();

    //Validating the number.
    while(n<1) {
        System.out.println("Please give a number greater or equal to 1");
        n = StdIn.readInt();
    }

    /*---------------------------------
    *
    *Lines 27-36 -> Creating the first
    *line and the first line's design.
    *
    ----------------------------------*/

    for (int i = 1; i <= n; i++) {
        System.out.printf("    %-4d", i);
    }
    System.out.println();
    System.out.print("  +");
    for (int i = 1; i <= n; i++) {
        System.out.print("-------+");
    }
    System.out.println();

    /*----------------------------------
    *
    *Lines 45-58 -> Printing the product
    *of the numbers and the design of
    *the table.
    *
    ----------------------------------*/

    for (int i = 1; i <=9 ; i++) {
        System.out.print(i + " |  ");
        for (int j = 1; j <= n; j++) {
            int a = (i * j);
            String b = "  |  ";
            System.out.printf("%2d %s", a, b);
        }
        System.out.println();
        System.out.print("  +");
        for (int k = 1; k <= n; k++) {
            System.out.print("-------+");
        }
        System.out.println();
    }
}
}

我可以做什么,以便细胞与任何大小的数字对齐?

Not Aligned Cells

Aligned Cells

提前致谢。

1 个答案:

答案 0 :(得分:0)

要稍微扩展@Thomas Weller的注释,您需要将表格单元格值计算循环与表格打印循环分开,因为在开始打印之前需要知道任何单元格中的最大位数。表格,因此%2d中的2可以是最大值。

编辑:你还需要知道最大值才能创建正确的单元格宽度而不是硬编码"-------+"