Java String.format args索引不一致

时间:2017-08-04 11:21:01

标签: java string indexing string-formatting

在Java中,您可以使用String.Format函数来生成格式化字符串。您还可以使用格式字符串中的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); 是您引用的参数的索引。不幸的是,它似乎并不完全一致,因为以下两行代码会产生相同的结果:

export default (req, callback) => {
  // ...
  compliance.forEach((rule, index) => {
    let response = await waRuleOverview(req, run.id, rule.id);
    // handle the response
  });
}

为什么0和1都引用相同的元素?它不应该是一个严格的基于1的索引而不是基于零的吗?

1 个答案:

答案 0 :(得分:3)

看起来它无法识别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