首页 > 解决方案 > 将多个值格式化为列表

问题描述

是否有一种足够简单的方法可以像我一样显示多个值但只显示非零值?(我真的不知道如何解释这一点,而且我的英语不是很好,所以我会给你提供一些例子,这样你就可以更好地理解我想要实现的目标。)

例子



实际代码:

public String knutsToString(int knuts) {
  int galleons = knuts / 493;
  int sickles = knuts / 29 - galleons * 17;
  knuts -= sickles * 29 + galleons * 493;

  return galleons + " galleons, " + sickles + " sickles and " + knuts + " knuts.";
}

标签: javastring

解决方案


这样的事情会做:

static void print(int galleons, int sickles, int knuts) {
    StringJoiner buf = new StringJoiner(", ");
    add(buf, galleons, "galleon", "galleons");
    add(buf, sickles, "sickle", "sickles");
    add(buf, knuts, "knut", "knuts");
    String text = buf.toString();
    int idx = text.lastIndexOf(',');
    if (idx != -1)
        text = text.substring(0, idx) + " and" + text.substring(idx + 1);
    System.out.println(text.isEmpty() ? "You are broke" : text);
}

private static void add(StringJoiner buf, int value, String singular, String plural) {
    if (value != 0)
        buf.add(value + " " + (value == 1 ? singular : plural));
}

测试

print(0, 0, 0);
print(0, 0, 5);
print(3, 0, 5);
print(3, 4, 5);

输出

You are broke
5 knuts
3 galleons and 5 knuts
3 galleons, 4 sickles and 5 knuts

请参阅IDEONE进行演示。


推荐阅读