String.format可以删除数字,如果它们为零?

时间:2018-05-13 18:24:51

标签: java string formatting format string-formatting

我正在制作一个秒表,我想只显示一个小时的字段,如果它们> 0。 目前我这样解决它,是否有更短的方式?

String timeLeftFormatted = "";
    if (hours > 0) {
        timeLeftFormatted = String.format(Locale.getDefault(),
                "%d:%02d:%02d", hours, minutes, seconds);
    } else {
        timeLeftFormatted = String.format(Locale.getDefault(),
                "%02d:%02d", minutes, seconds);
    }

2 个答案:

答案 0 :(得分:0)

有多种方法可以做到这一点,我能想到的最简单的方法就是:

timeLeftFormatted = String.format(Locale.getDefault(), "%s:%02d:%02d", hours > 0 ? String.valueOf(hours) : "", minutes, seconds);

编辑:

以类似的方式,您还可以根据hours是否大于零来修改未格式化的字符串。

答案 1 :(得分:0)

有一个技巧,使用argument_index

format string syntax的文档显示格式说明符具有以下语法:

%[argument_index$][flags][width][.precision]conversion

通过使用argument_index,您可以跳过未使用的参数,即使用固定参数列表,您可以将格式字符串本身替换为仅使用某些值。

使用您的示例和三元条件运算符,为了清晰起见,每个参数显示一行:

String timeLeftFormatted = String.format(
        Locale.getDefault(),
        (hours > 0 ? "%1$d:%2$02d:%3$02d" : "%2$02d:%3$02d"),
        hours,
        minutes,
        seconds
);

它也可以这样写:

String timeLeftFormatted = String.format((hours > 0 ? "%1$d:" : "") + "%2$02d:%3$02d",
                                         hours, minutes, seconds);