如何打印格式对齐列的列表

时间:2014-10-16 11:31:05

标签: java printing format alignment

我得到了前两列,但现在我无法将其余列与其标题对齐

打印什么

                 Male                       Female
Rank   Name              Number   Name              Number
   1   Christopher     52,308      Jessica   46,459
   2   Matthew     44,783       Ashley   45,548
   3   Joshua     43,203     Brittany   36,535
   4   Daniel     33,791       Amanda   34,389
   5   Nicholas     27,901     Samantha   25,862
   6   Anthony     25,070        Sarah   25,801
   7   William     24,875    Stephanie   24,850
   8   Kyle     22,695     Jennifer   22,217
   9   Jacob     21,992    Elizabeth   20,738

System.out.printf("%4.5s   %-3.20s     %,-9d%10.20s%,9d%n",
     rank,maleName,maleCount,femaleName,femaleCount); 

2 个答案:

答案 0 :(得分:1)

您使用的字符串格式(例如%4.5s%-3.20s%10.20s不会按照您的想法执行。

例如,%10.20s表示格式化一个字符串,至少包含10个字符,最多20个字符。这会将短字符串填充到10,并将长字符串截断为20个字符。

为了获得一致的格式,String格式的.之前和之后的数字应该相同。因此,例如,左对齐maleName并且无论名称多长,总是取20个字符,然后使用%-20.20s

答案 1 :(得分:0)

首先,为列提供一个更大的常量。例如,colum' name',

int columnLength = 15;

在打印' name'之前,计算 columnLength 与名称字符数之间的差异,让我们称之为nbSpace,

int nbSpace = columnLength - name.length;
String space = "";

for(int i = 0; i < nbSpace; i++) {
    space += " ";
}

然后,按空格填写

System.out.print(name+space);