2010-04-24 39 views

Trả lời

29

Hãy thử điều này:

String formattedNumber = String.format("%08d", number); 
+0

Mỗi lần được gọi là cá thể trình tạo mới i s được tạo. Vì vậy, tôi phải thừa nhận rằng với số lượng lớn dữ liệu, nó có thể gây ra vấn đề bộ nhớ lớn. –

10

Bạn cũng có thể sử dụng lớp DecimalFormat, như vậy:

NumberFormat formatter = new DecimalFormat("00000000"); 
System.out.println(formatter.format(100)); // 00000100 
2

String.format sử dụng một chuỗi định dạng được mô tả here

0

này cũng làm việc :

int i = 53; 
String spaceHolder = "00000000"; 
String intString = String.valueOf(i); 
String string = spaceHolder.substring(intString.lenght()).contract(intString); 

Nhưng các ví dụ khác dễ dàng hơn nhiều.

3

Một cách khác. ;)

int x = ... 
String text = (""+(500000000 + x)).substring(1); 

-1 => 99.999.999 (nines bổ sung)

import java.util.concurrent.Callable; 
/* Prints. 
String.format("%08d"): Time per call 3822 
(""+(500000000+x)).substring(1): Time per call 593 
Space holder: Time per call 730 
*/ 
public class StringTimer { 
    public static void time(String description, Callable<String> test) { 
     try { 
      // warmup 
      for(int i=0;i<10*1000;i++) 
       test.call(); 
      long start = System.nanoTime(); 
      for(int i=0;i<100*1000;i++) 
       test.call(); 
      long time = System.nanoTime() - start; 
      System.out.printf("%s: Time per call %d%n", description, time/100/1000); 
     } catch (Exception e) { 
      System.out.println(description+" failed"); 
      e.printStackTrace(); 
     } 
    } 

    public static void main(String... args) { 
     time("String.format(\"%08d\")", new Callable<String>() { 
      int i =0; 
      public String call() throws Exception { 
       return String.format("%08d", i++); 
      } 
     }); 
     time("(\"\"+(500000000+x)).substring(1)", new Callable<String>() { 
      int i =0; 
      public String call() throws Exception { 
       return (""+(500000000+(i++))).substring(1); 
      } 
     }); 
     time("Space holder", new Callable<String>() { 
      int i =0; 
      public String call() throws Exception { 
       String spaceHolder = "00000000"; 
       String intString = String.valueOf(i++); 
       return spaceHolder.substring(intString.length()).concat(intString); 
      } 
     }); 
    } 
} 
+1

+1 cho quảng cáo, mặc dù giải pháp chậm :-). –

+1

Tuy nhiên, không hoạt động với các từ khóa phủ định. – polygenelubricants

+0

Bạn có thể thấy nó không chậm như các giải pháp khác và hành vi không được xác định cho các từ khóa phủ định. Cũng giống như các giải pháp khác, sẽ có một DDDDDDDD không, trong đó D là một chữ số, đầu ra cho các số âm. –

0

Nếu bạn cần phải phân tích chuỗi này và hoặc hỗ trợ i18n xem xét mở rộng đối tượng

java.text.Format 

. Sử dụng các câu trả lời khác để giúp bạn có được định dạng.

1

Nếu bạn chỉ cần in ra, đây là một phiên bản ngắn hơn:

System.out.printf("%08d\n", number); 
2

Nếu Google Ổi là một lựa chọn:

String output = Strings.padStart("" + 100, 8, '0'); 

Ngoài Apache Commons Lang:

String output = StringUtils.leftPad("" + 100, 8, "0"); 
Các vấn đề liên quan