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
在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