Существует трюк с использованием argument_index
.
Документация синтаксиса строки формата показывает, что спецификаторы формата имеютследующий синтаксис:
%[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);