我使用String.format创建一个带参数的格式化字符串。是否可以以某种方式告诉格式化程序多次重用一个参数?
String.format
String.format(%s FOO %s %s, "test"); //desired output: "test FOO test test"
字符串
zyfwsgd61#
是的,您可以使用$说明符。$前面的数字表示参数编号,从1开始:
$
String.format("%1$s FOO %1$s %1$s", "test")
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!"
型(但不会抛出任何错误,因此这可能会被忽略。)
fv2wmkja3#
String.format("%1$s FOO %1$s %1$s", "test");
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
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");结果是“一加一加一等于四”给变量编号似乎会切断变量的进一步阅读。
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");
5条答案
按热度按时间zyfwsgd61#
是的,您可以使用
$
说明符。$
前面的数字表示参数编号,从1开始:字符串
rvpgvaaj2#
作为对Keppils回答的补充:当你开始给你的一个论点编号时,你必须把它们都编号,否则结果将不会像预期的那样。
字符串
会起作用。而
型
(但不会抛出任何错误,因此这可能会被忽略。)
fv2wmkja3#
字符串
hrirmatl4#
字符串
当格式说明符包含'<'('\u003c')标志时,使用相对索引,该标志会导致重复使用前一个格式说明符的参数。如果没有前一个参数,则会抛出MissingError ArgumentException。
型
Source(search for '闭包'):https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Formatter.html
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");
结果是“一加一加一等于四”
给变量编号似乎会切断变量的进一步阅读。