Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java String.format参数索引不一致_Java_String_Indexing_String Formatting - Fatal编程技术网

Java String.format参数索引不一致

Java String.format参数索引不一致,java,string,indexing,string-formatting,Java,String,Indexing,String Formatting,在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);

在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$
,因为索引从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

JVM可能比您更聪明。它可能认识到只有一个参数符合%d格式,并相应地匹配。@duffymo情况并非如此。这里是与索引
0
1
匹配的
Joe
,而不是整数参数是的,只有20个匹配的十进制格式。我仍然感到非常困惑,为什么它会以这种方式实现,因为像这样的东西可能会有不一致的输出:
String.format(“%s,%0$s,%1$s,%2$s,%3$s,%4$s”, 1, 2, 3, 4, 5);