Java 打印格式一个变量的多个修饰符

Java multiple modifiers to printformat one variable

我想为一个table打印一个字符串,但是一个变量需要多个修饰符

    System.out.format("%-3s %-20s %-12s %-6s %.2f %-9s\n",
            id, city, date, days, price, vehicle);
}

我想要这样的东西

    System.out.format("%-3s %-20s %-12s %-6s %.2f%10s %-9s\n",
            id, city, date, days, price, vehicle);
}

但它会抛出错误,因为它认为参数不会有 6 个值,而是 7 个值

不完全清楚你想做什么。

打印一个数字,但扩展到至少 10 个 'width'

如果你想结合 %.2f 的想法(如,向下舍入到 2 位数字 'after the comma'),以及 '这应该占用 10 个宽度;如果小于该值,请添加空格。如果它更多,oof,好吧,它看起来很糟糕,但然后打印更多 - 然后,你要找的东西 %10.2f - 每个 'letter' (%f, %s, etc) 有自己的一套修饰符,而且修饰符是完全独立的(虽然有趋势)。 %10s 中的 10 专门适用于字符串格式化,你不能告诉 java: 你能应用这个原则(添加空格以确保它始终占据至少 10 个宽度)- 但是到这个完全不同的格式字母?

但是,%f 格式器也有一个宽度(事实上,它们几乎一整天),所以使用它的 'width-setting' 特性:%10.2f.

%10.2f 表示:

格式化数值。如果打印的值在小数部分有超过 2 位数字,则将其四舍五入,使其有 2 位数字作为小数部分;如果它少,就少用。另外,如果完整的字符串(包括小数部分,和逗号)长度小于10个字符,则在左侧添加空格(即right-aligned ), 所以至少是10. 多了就多了, 别想砍掉什么.

您可能认为 10.2 的意思是:10 位数字,然后是逗号,然后是 2 位数字。它没有。

我想在格式字符串中多次使用相同的参数

也许您的意思是:我希望一个输入(例如,price)连续使用两次。这在日期格式中出现了很多(但是,用 format 格式化日期很奇怪,所以它不会出现很多)。 <1$ 选项就是为了这个目的而存在的。示例:

System.out.format("Your birthday is on: %tY-%tm-%te\n", birthday, birthday, birthday);

%tY 打印参数的年份,tm 月份,te 日期。然而,连续3次都要过生日,真的很烦人。我们可以解决这个问题:

System.out.format("Your birthday is on: %tY-%<tm-%<te\n", birthday);
// -OR -
System.out.format("Your birthday is on: %tY-%1$tm-%1$te\n", birthday);

<表示:Re-use同一个参数。 1$ 表示:使用第一个参数(2$,等等,同样有效)。因此,以上两行产生相同的结果。

docs 详细介绍了所有这些内容。下次您遇到问题时,通常最好查看 java 文档,阅读该文档并点击它提供的任何链接,只有当您仍然感到困惑时,才一般地搜索网络,只有这样,如果找不到任何东西,请在 SO 上提问。