4

我正在寻找一种快速简便的方法将 int 格式化为带有两个前导零的字符串。我找到了这个https://stackoverflow.com/a/4377337/47690答案,它看起来像我需要的。所以我就这样实现了

int i = 34; //could be any value but you get the idea   
String.format("%03d", i);

但是,Eclipse 似乎抱怨 String.format 的Object[]第二个参数需要一个。这里发生了什么?

4

4 回答 4

5

如果要打印 的值i,可以使用:

System.out.printf("%03d", i);

代替

System.out.println(String.format("%03d", i));

编辑 :

我也在 Java 6 中尝试了你的代码,但它没有工作。所以,我使用了 printf()。 哦。对不起!我清理了项目并且它工作。

我正在使用 Java 6 和 Eclipse Helios。

于 2013-01-24T09:31:56.787 回答
4

检查你的项目设置

project -> Properties -> Java Compiler -> Compiler compliance level

您可能使用的 Java 1.4 无法识别 vararg

String format(String format, Object ... args)
于 2013-01-24T09:39:52.327 回答
1

以下在 Java 7 下编译并运行良好(Eclipse Juno SR1 对此很满意):

public class Main {
    public static void main(String[] args) {
        int i = 42;   
        System.out.println(String.format("%03d", i));
    }
}

错误消息是一条红鲱鱼:即使最后一个参数是Object...(aka Object[]),自动装箱会处理所有事情。

我怀疑您使用的是过时的 Java 和/或 Eclipse 版本,或者您的 Eclipse 项目中的编译器合规级别设置为 pre-1.5(即使您使用的是 1.5+)。

于 2013-01-24T09:29:02.550 回答
0

String s = String.format("%04d", i);

此代码代表要字符串的数字中的 4 位数字,因此.. 如果您使用 %04d 我将在前面得到两个试用零

虽然 int i 是一个原始的并且它的期望对象作为它的参数,

它的 JVM 将在内部负责转换为对象数据类型

根据java实现看到这个..

public static String format(String format, Object ... args) {
return new Formatter().format(format, args).toString();
}

动态附加零的示例代码...

导入 java.text.DecimalFormat;公共类 ArrayTest {

public static void main(String[] args) {
    int i = 34; //could be any value but you get the idea   
    int zeroCount = 2;

    String s = String.format("%d", i);
    int length = s.length()+zeroCount;

    System.out.println(String.format("%0"+length+"d", i));

    // second way u can achieve 
    DecimalFormat decimalFormat = new DecimalFormat();
    decimalFormat.setMinimumIntegerDigits(length);
    System.err.println(decimalFormat.format(i));
}

}

谈到 System.format 的论点,它可能需要无限的不。参数作为它的可变参数对象作为第二个参数

检查这个网址 http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#format%28java.lang.String,%20java.lang.Object...%29

于 2013-01-24T09:48:13.033 回答