如何在java 8中使用String.format?

时间:2015-05-25 13:58:01

标签: java string java-8

今天我在java 8中的eclipse Kepler中编写了一个简单的程序。实际上,我从一些视频教程中复制了它。在那个教程中,它运行了,但在我的计算机中却没有。错误行是

 String.format("%02d:%02d:%02d",hour,minute,second);

我不明白这里的错误是什么。 它突出显示format(String,object[])类型中的方法String不适用于argument(String, int, int, int)

public class Demo {

private int hour;
    private int second;
    private int minute;

    public void setTime(int h,int m,int s){
        hour=((h>=0 && h<24)?h:0);
        minute=((m>=0 && m<60)?m:0);
        second=((s>=0 && s<60)?s:0);
    }

    public String railwayTime(){
        return String.format("%02d:%02d:%02d",hour,minute,second);//error in this line
    }

    public String regular(){
        return String.format("%02d:%02d:%02d %s",((hour==0 ||hour==24)?12:(hour%12)), minute, second, (hour>=12)?"AM":"PM");//error in this line
    }
}

public class ShowTime {
    public static void main(String[] args){
        Demo d=new Demo();
        System.out.println(d.railwayTime());
        System.out.println(d.regular());
    }
}

3 个答案:

答案 0 :(得分:6)

异常会要求您使用数组而不是逗号分隔字符串:

// incorrect
String.format("%02d:%02d:%02d",hour,minute,second);

// fast but correct
Object[] data = { hour, minute, second };
String.format("%02d:%02d:%02d", data);

但实际上,方法format(String,object[])String中不存在,它是:format(String pattern, Object... arguments)什么应该与逗号,一起使用。您的语法有一些内容,但在显示的代码中没有。

答案 1 :(得分:1)

这个问题的真正答案只是你的int类型。 您不必专门使用Object,但必须使用从Object继承的类型,而int是不从Object继承的原始类型,就像所有原始类型一样。 因此,您可以使用Integer而不是int来解决问题。

答案 2 :(得分:0)

我知道这很老,但是我有一个猜测。

private int hour;
private int second;
private int minute;

如上所述,您将hoursecondminute声明为int类型,该类型是原始数据类型,并且与Object类型不兼容。

您可能想将它们更改为:

private Integer hour;
private Integer second;
private Integer minute;

Integer是原始类型int的包装,用于对其进行对象化。 届时,String.format("%02d:%02d:%02d",hour,minute,second);行应该可以正常工作。