有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

你好,我想打印一些东西,使它们对齐

    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) 个答案

  1. # 1 楼答案

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

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

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

    我想你会发现,在格式字符串本身中进行所有格式设置要容易得多,例如

    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个字符的“宽度”

  3. # 3 楼答案

    像这样格式化%15s会使文本对齐。 你必须写%-15秒才能在15个图表中为第一个字符串留出位置。 第一个字符串将向左对齐,下一个字符串将从第16个图表开始

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