Java 当我尝试格式化字符串时,为什么会出现非法FormatPrecisionException?

Java 当我尝试格式化字符串时,为什么会出现非法FormatPrecisionException?,java,string-formatting,Java,String Formatting,当我用Java编写代码时,它显示了以下异常 线程主java.util.IllegalFormatPrecisionException中出现异常:2 我不知道如何解决这个问题。 这是主要的参考代码 ool2 time=new ool2(); System.out.println(time.toMil()); 下面是ool2中的方法调用 public String toMil() { return String.format("%.2d:%.2d:%.2d",hr,min,sec); }

当我用Java编写代码时,它显示了以下异常

线程主java.util.IllegalFormatPrecisionException中出现异常:2

我不知道如何解决这个问题。 这是主要的参考代码

ool2 time=new ool2();
System.out.println(time.toMil());
下面是ool2中的方法调用

public String toMil() {
    return String.format("%.2d:%.2d:%.2d",hr,min,sec);
}
oo2代码:

public class oo2 {

    private int hr,min,sec; 

    public void setTime(int h,int m,int s) { 
        hr= (h>=0&&h<24)?h:0; 
        min= (m>=0&&m<60)?m:0; 
        sec= (s>=0&&s<60)?s:0;
    }

    public String toMil() { 
        return String.format("%.2d:%.2d:%.2d",hr,min,sec); 
    }
}
要将时间格式化为00:00:00,请使用下面的

String.format("%02d:%02d:%02d", hr, min, sec);
来自类的javadoc

常规、字符和数字类型的格式说明符具有 以下语法: %[argument_index$][flags][width][.precision]转换

您必须提供的唯一部分是转换

同样来自同一个javadoc,关于转换

“d”整数结果格式为十进制整数

因此,int所需的格式说明符是%d,您正在正确使用它,但是int没有精度。浮点或双精度可以有精度,但int没有精度。所以我猜你想要的是宽度而不是精度,因此你需要删除。字符并使用以下命令

return String.format("%2d:%2d:%2d",hr,min,sec);
但请注意,这将打印一个单位数数字,如7,前导空格为7。如果需要前导零,则需要在2之前添加一个零,如

return String.format("%02d:%02d:%02d",hr,min,sec);

请提供oo2和main的完整和格式化代码?这是ool2的私有int hr,min,sec代码;公共无效setTimeint h、int m、int s{hr=h>=0&&h=0&&m=0&&scheck文档:对于字符、整数和日期/时间参数类型以及百分比和行分隔符转换,精度不适用;如果提供了精度,将引发异常。1-精度是代码中格式字符串2的点后给出的数字,用于like表示小数点后的位数,这对int无效-可能您希望使用%2d,不带小数点,甚至%02d表示前导零