如何使用printf()(Java)正确格式化文本

时间:2011-04-27 15:49:13

标签: java printf

您好我想打印一些内容以便它们对齐。

    for (int i = 0; i < temp.size(); i++) {
        //creatureT += "[" + temp.get(i).getCreatureType() + "]";
        creatureS = "\t" + temp.get(i).getName();
        creatureT = " [" + temp.get(i).getCreatureType() + "]";
        System.out.printf(creatureS + "%15a",creatureT + "\n");
   }

,输出

    Lily      [Animal]
    Mary         [NPC]
    Peter      [Animal]
    Squash          [PC]

我只想将[Animal],[NPC]和[PC]对齐,如

    Lily      [Animal]
    Mary      [NPC]
    Peter     [Animal]
    Squash    [PC]

说我知道没有名字会超过15个字符。

3 个答案:

答案 0 :(得分:5)

我认为你会发现在格式字符串本身中进行所有格式化要容易得多,即

System.out.printf("\t%s [%s]\n", creature.getName(), creature.getCreatureType());

会打印

  Lily [Animal]
  etc...

您可以参考String formatting documentation确切的格式,以便为字符串打印至少15个空格以实现对齐效果,例如

System.out.printf("\t%15s[%s]\n", creature.getName(), creature.getCreatureType());

关键是为%15s中参数列表中的第一项指定15个字符的“宽度”。

答案 1 :(得分:2)

基本思路是您在格式字符串(第一个参数)中描述完整格式,并将所有动态数据作为附加属性提供。

通过从动态数据(似乎是生物名称)构建格式字符串来混合这两者,这将导致意外结果。这样做:

Creature t = temp.get(i);
System.out.printf("\t%15s [%s]\n", t.getname(), t.getCreatureType());

答案 2 :(得分:0)

像这样的%15s格式可以使类似文本的行正确显示。 您必须写%-15来放置15个图表中的第一个字符串。 第一个字符串将左对齐,下一个字符串将从第16个图表开始

Lily           [Animal]
Mary           [NPC]
Peter          [Animal]
Squash         [PC]