0

我试图让缩进正确。在下面的代码中,s2 来自数据库并输出到控制台(System.out.println)。实际上,S2 是一个对象列表,而 s2 是带有缩进的 toString。但为了简单起见,请考虑以下代码:

public class TestIndent
{
    public static void main(String[] args)
    {
        String s1 = "CASE NUM\tTYPE\tREF DATE\tAMOUNT";
        String s2 = "9157120183\tPPAQ\t*** REF DATE NOT EXISTS! ***\t$95.00";       

        System.out.println(s1);
        System.out.println(s2);
    }
}

输出将是:

CASE NUM    TYPE    REF DATE    AMOUNT
9157120183  PPAQ    *** REF DATE NOT EXISTS! ***    $95.00

我的愿望是让它像这样正确缩进:

CASE NUM    TYPE    REF DATE                        AMOUNT
9157120183  PPAQ    *** REF DATE NOT EXISTS! ***    $95.00

您会注意到“金额”就在数字的顶部(这是正确的位置)。所以就在我编写任何基于字符串的最大长度缩进它的类之前,我想知道这个问题是否已经存在。

4

2 回答 2

1

制表符是在不同环境中呈现不同的单个字符,因此它本质上很难使用 - 在您的控制台上看起来不错的东西在我的控制台上可能看起来不错,或者在有 8 个字符宽的制表符的 Lee Meador 上便便。

您可以通过创建一个用空格填充标题的函数来使用 Sotirios 的建议 - 因为您可以信任空格。当然,如果你的控制台没有使用固定宽度的字体,你也不能依赖它——但它会更好。

如果您知道要显示列的宽度,您还可以使用 javas 内置的字符串格式来减少手动计算的需要,但它会截断长值,例如:

System.out.printf("%-10.10s  %-6.6s %-30.30s %-10.10s%n", "CASE NUM", "TYPE", "REF DATE", "AMOUNT");
System.out.printf("%-10.10s  %-6.6s %-30.30s %-10.10s%n", "9157120183", "PPAQ", "*** REF DATE NOT EXISTS! ***", "$95.00");

或者,您可以将输出选项卡分隔或逗号分隔,并将其写入文件,并让设计用于呈现这些内容的程序处理它。

于 2013-09-04T19:21:06.843 回答
0

System.out.println()的选项卡行为取决于底层操作系统。如果您想拥有更多控制权(特别是如果您的操作系统不提供任何控制权),您最好根据一些算法(固定间距制表符或可变间距制表符)将它们替换为 Java 程序中的空格。

另一种选择是您保留输出中的选项卡,但将其重定向到文件。然后使用允许控制选项卡大小的工具打开文件。当然,这取决于操作系统。

于 2013-09-04T19:17:50.140 回答