我正在努力让缩进正确。在下面的代码中,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长度缩进它的类之前,我想知道这个问题是否已存在。
答案 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程序中的空格替换它们。
另一个替代方法是保留选项卡中的标签,但将其重定向到文件。然后用一个允许控制标签大小的工具打开文件。当然,这取决于操作系统。