java Stringformatter可以重用参数吗?

ee7vknir  于 2023-11-15  发布在  Java
关注(0)|答案(5)|浏览(133)

我使用String.format创建一个带参数的格式化字符串。是否可以以某种方式告诉格式化程序多次重用一个参数?

String.format(%s FOO %s %s, "test"); //desired output: "test FOO test test"

字符串

zyfwsgd6

zyfwsgd61#

是的,您可以使用$说明符。$前面的数字表示参数编号,从1开始:

String.format("%1$s FOO %1$s %1$s", "test")

字符串

rvpgvaaj

rvpgvaaj2#

作为对Keppils回答的补充:当你开始给你的一个论点编号时,你必须把它们都编号,否则结果将不会像预期的那样。

String.format("Hello %1$s! What a %2$s %1$s!", "world", "wonderful");
// "Hello world! What a wonderful world!"

字符串
会起作用。而

String.format("Hello %1$s! What a %s %1$s!", "world", "wonderful");
// "Hello world! What a world world!"


(但不会抛出任何错误,因此这可能会被忽略。)

fv2wmkja

fv2wmkja3#

String.format("%1$s FOO %1$s %1$s", "test");

字符串

hrirmatl

hrirmatl4#

String.format("%s FOO %<s %<s", "test")

字符串
当格式说明符包含'<'('\u003c')标志时,使用相对索引,该标志会导致重复使用前一个格式说明符的参数。如果没有前一个参数,则会抛出MissingError ArgumentException。

formatter.format("%s %s %<s %<s", "a", "b", "c", "d")
 // -> "a b b b"
 // "c" and "d" are ignored because they are not referenced


Source(search for '闭包'):https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Formatter.html

0lvr5msh

0lvr5msh5#

请注意,如果使用编号变量,要么对所有变量编号,要么在使用所有变量之前不要开始使用编号表示法。
例如String.format(%s and %s and %1$s is four, "one , "two");
结果是“一加二和一等于四”
但是String.format(%1$s and %s and %1$s is four, "one , "two");
结果是“一加一加一等于四”
给变量编号似乎会切断变量的进一步阅读。

相关问题