2011-05-17 1 views
97

Мне интересно, можно ли использовать метод String.format в Java, чтобы получить целое число, предшествующее нулям?Формат целочисленного с использованием формата строки 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 пустым пространством. Возможно ли предшествовать числу нулями?

+0

Возможный дубликат [Добавить ведущие нули в Java] (http://stackoverflow.com/questions/275711/add-leading-zeroes-in-java) –

ответ

143

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

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

160
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 для получения дополнительной информации.

8

Если вы используете библиотеку третьей стороны под названием Apache Commons-Ланг, следующее решение может быть полезно:

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

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

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

+0

StringUtils.leftPad - еще один хороший выбор и можно утверждать, что оно более читаемо, плюс оно позволяет вам набивать другие символы. У меня был Google, но я не могу найти ничего, что подтверждает, что это быстрее - можете ли вы предоставить некоторые доказательства для этого? –

+0

https://github.com/anilbharadia/JavaPerformanceTests/blob/master/PerformanceTests/src/org/rw/performance/StringUtilsVsStringFormat.java Запустите его с помощью junit и проверьте время –