有人可以向我解释此Java代码(使用System.out.format格式化输出)吗?

Col*_*ole 1 java

枚举:

public enum tuna {
Veyron("Speed", "R1"),
Reventon("Speed", "R3"),
MclarenF1("Speed", "R3");

public final String style;
public final String theclass;

tuna(String thestyle, String theclasss){
style = thestyle;
theclass = theclasss;
  }
    public String getStyle(){
            return style;
    }

    public String getClasss(){
            return theclass;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我不理解的主类中的代码:

int maxlength = tuna.Veyron.name().length();

    for( tuna cars : tuna.values() ) {
      System.out.format( "%-" + maxlength + "s   %-5s %5s\n", cars.name(), cars.getStyle(), cars.getClasss() );
Run Code Online (Sandbox Code Playgroud)

但是我不了解的部分(很好)是:

"%-" + maxlength + "s   %-5s %5s\n"
Run Code Online (Sandbox Code Playgroud)

它似乎

%-5s
Run Code Online (Sandbox Code Playgroud)

在汽车名称(cars.name())和“ Speed”cars.getStyle())之间更改标签的宽度,而

%5s
Run Code Online (Sandbox Code Playgroud)

在代码的“速度”和“汽车的类别(cars.getClasss())部分之间更改标签的宽度。(输出如下所示:)

原始输出:

在此处输入图片说明

现在,如果我更改%-5S到%-15s什么的,间隔的变化在“威龙”和“速度”之间,但它也改变了“雷文顿”和它的 “速度”。

我将Veyron的名称更改为Veyronrrr,以使其更长。

int maxlength = tuna.Veyronrrr.name().length();
Run Code Online (Sandbox Code Playgroud)

这是输出:

在此处输入图片说明

那么我这些代码是什么,为什么它们要做他们正在做的事情?

rua*_*akh 5

%-5s 表示“字符串,在至少五个字符的列中左对齐”,或者,如果您愿意,“字符串,用空格右填充,直到其长度至少为五个字符”。

%5s 相同,但是右对齐而不是左对齐(即,左填充而不是右填充)。

%-15s%15s您所期望的,是15个字符的列,而不是5个。

有关格式字符串的语法的更多信息,请参见http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#syntax