Форматирование целого числа с использованием формата строки Java

130

Мне интересно, можно ли, используя метод String.format в Java, дать целое число перед нулями?

Например:

1 станет 001
2 станет 002
...
11 станет 011
12 станет 012
...
526 останется как 526
... и т. Д.

На данный момент я пробовал следующий код:

String imageName = "_%3d" + "_%s";

for( int i = 0; i < 1000; i++ ){
    System.out.println( String.format( imageName, i, "foo" ) );
}

К сожалению, перед числом стоит 3 пустых места. Можно ли вместо этого ставить нули перед числом?

Моя голова болит
источник
возможный дубликат добавления начальных нулей в Java
Джонатон Фауст

Ответы:

173

Используйте %03dв описателе формата целого числа. Это 0означает, что число будет заполнено нулями, если оно меньше трех (в данном случае) цифр.

См. FormatterДокументацию для других модификаторов.

Мат
источник
212
String.format("%03d", 1)  // => "001"
//              │││   └── print the number one
//              ││└────── ... as a decimal integer
//              │└─────── ... minimum of 3 characters wide
//              └──────── ... pad with zeroes instead of spaces

См. java.util.FormatterДополнительную информацию.

maerics
источник
13

Если вы используете стороннюю библиотеку под названием apache commons-lang, может оказаться полезным следующее решение:

Используйте StringUtilsкласс apache commons-lang :

int i = 5;
StringUtils.leftPad(String.valueOf(i), 3, "0"); // --> "005"

Как StringUtils.leftPad()быстрее, чемString.format()

Анил Бхарадиа
источник
StringUtils.leftPad - еще один хороший выбор, и можно утверждать, что он более читабельный, плюс он позволяет дополнять другими символами. У меня был Google, но я не могу найти ничего, подтверждающего, что он работает быстрее - не могли бы вы предоставить доказательства этого?
My Head Hurts
github.com/anilbharadia/JavaPerformanceTests/blob/master/… Запустите его с помощью junit и проверьте время
Анил Бхарадиа