Java – 如何将数字格式化为2个char字符串?

如何将099之间的int格式化为2个字符串的字符串。 例如

 4 becomes "04" 36 becomes "36" 

提前致谢。

使用String.format() 。 例:

 class Test{ public static void main(String[]args){ System.out.println(String.format("%02d", 42)); //42 System.out.println(String.format("%02d", 7)); //07 } } 

编辑:

luiscubal的评论让我思考,所以我想为什么不对这三种选择进行基准测试。

 import java.text.*; interface Fmt{ public String f(int x); } class Test{ static NumberFormat formatter = new DecimalFormat("00"); static Fmt f1 = new Fmt(){ public String f(int x){ return ((x<10)?"0":"") + x; } public String toString(){return "f1";} }; static Fmt f2 = new Fmt(){ public String f(int x){ return String.format("%02d", x); } public String toString(){return "f2";} }; static Fmt f3 = new Fmt(){ public String f(int x){ return formatter.format(x); } public String toString(){return "f3";} }; public static void main(String[]args){ Fmt[] fmts = new Fmt[]{f1, f2, f3, f3, f2, f1}; for (int x : new int[]{7, 42, 99}){ String s0 = null; for (Fmt fmt : fmts) if (s0==null) s0 = fmt.f(x); else if (!fmt.f(x).equals(s0)) System.exit(1); System.out.printf("%02d\n", x); for (Fmt fmt : fmts){ String s = null; int count = 0; System.gc(); long t0 = System.nanoTime(); for (int i=0; i<100000; i++){ count += fmt.f(x).length(); } long t1 = System.nanoTime(); System.out.printf(" %s:%8.2fms, count=%d\n", fmt, (t1-t0)/1000000.0, count); } } } } 

我得到的输出是:

 07 f1: 11.28ms, count=200000 f2: 195.97ms, count=200000 f3: 45.41ms, count=200000 f3: 39.67ms, count=200000 f2: 164.46ms, count=200000 f1: 6.58ms, count=200000 42 f1: 5.25ms, count=200000 f2: 163.87ms, count=200000 f3: 42.78ms, count=200000 f3: 42.45ms, count=200000 f2: 163.87ms, count=200000 f1: 5.15ms, count=200000 99 f1: 5.83ms, count=200000 f2: 168.59ms, count=200000 f3: 42.86ms, count=200000 f3: 42.96ms, count=200000 f2: 165.48ms, count=200000 f1: 5.22ms, count=200000 

结果 - 如果我测试正确 - SpeedBirdNine有最有效的解决方案,尽管很糟糕。 所以我修改我的解决方案:

 String answer = ((x<10)?"0":"") + x; 

回想起来,我认为这是有道理的,因为我的初始解决方案会产生解析格式字符串的成本,而且我认为Anthony的格式化程序在每次迭代后都会有一些数据结构。

通过保持包含所有100个字符串的String[]可以预测得更快,但这可能是矫枉过正的......

您可以使用NumberFormat执行此操作。 例如,

 NumberFormat formatter = new DecimalFormat("00"); String s = formatter.format(4); 

简单的方法是将“”附加到整数(或任何基本类型)

 String str = "" + anyInetger; 

您可以使用

 String str; if (anyInteger < 10) { str = " 0" + anyInetger; } else { str = "" + anyInetger; }