จัดรูปแบบจำนวนเต็มโดยใช้ Java String Format


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
Jonathon Faust

คำตอบ:


173

ใช้%03dในตัวระบุรูปแบบสำหรับจำนวนเต็ม 0หมายความว่าตัวเลขจะเป็นศูนย์ที่เต็มไปด้วยถ้ามันเป็นน้อยกว่าสาม (ในกรณีนี้) ตัวเลข

ดูFormatterเอกสารสำหรับตัวปรับแต่งอื่น ๆ


213
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ข้อมูลเพิ่มเติม


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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.