如何将介于0
和99
之间的整数格式化为一个长度为2的字符串。例如:
4 becomes "04"
36 becomes "36"
提前感谢。
如何将介于0
和99
之间的整数格式化为一个长度为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 formatter = new DecimalFormat("00");
String s = formatter.format(4);
将 "" 添加到整数(或任何基本类型)后面是一种简单的方法。
String str = "" + anyInetger;
标签
。String str;
if (anyInteger < 10)
{
str = " 0" + anyInetger;
}
else
{
str = "" + anyInetger;
}
Integer.toString(i);
或使用 new StringBuffer(3).append('0').append(i).substring(i<10?0:1,i<10?2:3);
更简洁。 - ratchet freakstr
是不可见的。虽然效率很高,但还是要加1分。 - Vlad
String.format()
实例化了一个Formatter
,然后就是一个相当复杂的过程。我认为其中还涉及到 NumberFormat。有一些巨大的 switch 语句、拆箱操作和边缘情况等。 - Vlad