5

我有这个代码:

public String toString(Day day)
{
    String s = day.getDayName() + "    " + day.toString();
    return s;
}

这是 Day 类的 toString 方法:

public String toString()
{
    String s = "";
    for (Slot slot: slots)
        s += slot.toString();
    return s;
}

当一遍又一遍地调用它时,它会打印:

芭比
 星期一 10: X 11: 12: 2: 3: 4:
 星期二 10: 11: 12: 2: 3: 4: X
 星期三 10:11:12:2:3:4:
 星期四 10:11:12:2:3:4:
 星期五 10:11:12:2:3:4:
    芭比
 星期一 10:11:12:2:3:4:
 周二 10:11:12:2:3:4:
 星期三 10:11:12:2:3:4:
 星期四 10: 11: 12: 2: X 3: 4:
 星期五 10:11:12:2:3:4:
    兔子
 星期一 10:11:12:2:3:4:
 周二 10:11:12:2:3:4:
 星期三 10:11:12:2:3:4:
 星期四 10:11:12:2:3:4:
 星期五 10:11:12:2:3:4:

但是,我想这样打印:

芭比,收入为 95.00 美元
周一 10:11:12:X 2:3:4:
周二 10:11:12:2:3:4:
星期三 10:11:12:2:3:4:
星期四 10:11:12:2:3:4:
周五 10:11:12:2:3:4:
博比,收入是 45.00 美元
周一 10:11:12:2:3:4:
周二 10:11:12:2:3:X 4:
星期三 10:11:12:2:3:4:
星期四 10:11:12:2:3:4:
周五 10:11:12:2:3:4:
兔子,收入是 0.00 美元
周一 10:11:12:2:3:4:
周二 10:11:12:2:3:4:
星期三 10:11:12:2:3:4:
星期四 10:11:12:2:3:4:
周五 10:11:12:2:3:4:

我知道这适用于 Java 中的格式化打印。但我不知道该怎么做。

4

3 回答 3

4

您可以使用String.format(),它将接受宽度。

我认为你可以改变:

String s = day.getDayName() + "    " + day.toString();

至:

return String.format("%9s %s", day.getDayName(), day.toString());

并得到你想要的。

于 2010-05-13T08:33:37.767 回答
3

这是工作java.util.Formatter

    String[][] kvs = {
            { "Name", "Johnny" },
            { "Age", "19" },
            { "Sex", "Female" },
    };
    for (String[] kv : kvs) {
        System.out.println(
            String.format("%-10s:%10s", kv[0], kv[1])
        );
    }

这打印:

Name      :    Johnny
Age       :        19
Sex       :    Female

句法

%[flags][width]conversion
  • -是左对齐的标志
  • sString转换

连接String

请注意,您永远不应该在循环中构建Stringusing 。+=你应该使用 aStringBuilder代替。

StringBuilder sb = new StringBuilder();
for (Slot slot: slots) {
    sb.append(slot.toString());
}
return sb.toString();

相关问题

于 2010-05-13T09:25:36.293 回答
0

你检查过 java.util.Formatter 吗?它从 1.5 btw 起提供。

于 2010-05-13T08:35:11.897 回答