当\ t不正确时如何很好地缩进。

时间:2013-09-04 18:51:49

标签: java indentation

我正在努力让缩进正确。在下面的代码中,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

您会注意到'AMOUNT'位于数字的正上方(这是正确的位置)。 所以就在我编写任何基于字符串的MAX长度缩进它的类之前,我想知道这个问题是否已存在。

2 个答案:

答案 0 :(得分:1)

标签字符是一个单独的字符,在不同的环境中会有不同的呈现方式,因此它本身很难使用 - 在我的控制台上看起来不错的东西可能看起来很好,或者是Lee Meador的有8个字符宽标签的便便。< / p>

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

如果您知道要显示列的宽度,也可以使用内置String formatting的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");

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

答案 1 :(得分:0)

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

另一个替代方法是保留选项卡中的标签,但将其重定向到文件。然后用一个允许控制标签大小的工具打开文件。当然,这取决于操作系统。