String.format不允许int

时间:2013-01-24 09:26:13

标签: java eclipse string-formatting

我一直在寻找一种快速简便的方法,将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 个答案:

答案 0 :(得分:5)

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

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

而不是

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

编辑:

此外,我在Java 6中尝试了您的代码,但它无效。所以,我使用了printf()。 喔。抱歉!我清理了项目并且工作正常。

我正在使用Java 6和Eclipse Helios。

答案 1 :(得分:4)

检查项目设置

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

你可能在Java 1.4中无法识别vararg

String format(String format, Object ... args)

答案 2 :(得分: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...(又名Object[]),自动装箱会处理所有事情。

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

答案 3 :(得分: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();
}

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

import 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的论点,它可能需要无限的不。参数作为第二个参数的varargs对象

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