Java String.format 参数索引不一致

Java String.format args indexing inconsistency

在Java中你可以使用String.Format函数来制作格式化字符串。您还可以按照您希望的顺序引用函数的参数,方法是在格式字符串中使用 i$,其中 i 是您引用的参数的索引。不幸的是,它似乎并不完全一致,因为以下两行代码产生完全相同的结果:

String.format("My name is %0$s and I am %2$d years old", "Joe", 20);
String.format("My name is %1$s and I am %2$d years old", "Joe", 20);

为什么0和1都指的是同一个元素?不是应该严格从 1 开始索引而不是从 0 开始吗​​?

好像不认识0$,因为索引是从1开始的,所以,它是根据那个%s的位置来取参数的。在这里,您的 %0$s 是参数的第一个引用,因此它采用第一个参数 Joe

您可以 运行 并查看两者之间的区别:

 String.format("%s %1$s %2$d", 1, 20, 13);
 Output: 1, 1, 20
 String.format("%s %0$s %2$d", 1, 20, 13);
 Output: 1, 20, 20