2011-05-17 60 views
97

我想知道是否有可能使用Java中的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個空格。是否可以在數字前加上零來代替?

+0

可能的重複[在Java中添加前導零](http://stackoverflow.com/questions/275711/add-leading-zeroes-in-java) – 2011-05-17 17:13:53

回答

143

在整數的格式說明符中使用%03d0表示如果數字小於3(本例中)數字,則該數字將被填零。

查看其他修飾符的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的公地郎第三方庫,下面的解決方案可能是有用的:

使用StringUtils類阿帕奇commons-lang的:

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

由於StringUtils.leftPad()快於String.format()

+0

StringUtils.leftPad是另一個不錯的選擇並且可以認爲它更具可讀性,並允許您使用其他字符進行打擊。我有一個谷歌,但我找不到任何確認速度更快的東西 - 你能提供一些證據嗎? – 2013-07-09 12:20:59

+0

https://github.com/anilbharadia/JavaPerformanceTests/blob/master/PerformanceTests/src/org/rw/performance/StringUtilsVsStringFormat.java用junit運行它並檢查時間 – 2013-07-10 06:54:05