我正在制作一个秒表,我想只显示一个小时的字段,如果它们> 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);
}
答案 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);