String.format("%1s","").equals("")); // --> return false !
String.format("%1s","").equals(" ")); // --> return true !
- 为什么会发生这种情况?
- 空间从哪里来?
在格式说明符中,通过最小宽度值1
来指定空格。
String.format("%1s","").equals(" ")
^
1
是一个宽度,即(来自Javadoc)“要写入输出的最小字符数”。 - ruakh%1$s
。美元符号在参数索引后是必需的。 - ruakh你想像这样添加一个参数索引
String.format("%1$s", ""); //returns ""
String.format("%2$s %1$s", "a", "b"); //returns "b a"
你的代码定义了一个“宽度”
String.format("%3s", ""); // returns " ";
String.format("%3s", "a"); // returns " a";
String.format("%-3s", "a"); // returns "a ";
阅读此内容以获取更多信息: http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#syntax
%1s
是一种没有任何参数的格式说明符。没有参数的格式说明符的通用语法如下:
%[flags][width]conversion
在此,
可选的标志是一组字符,用于修改输出格式。有效标志的集合取决于转换。
和
可选的宽度是一个非负十进制整数,表示要写入输出的最小字符数。
因此,1
指定了宽度,这里是为什么会得到 " "
而不是 ""
的描述:
宽度是要写入输出的最小字符数。如果转换后的值的长度小于宽度,则输出将通过 ' ' (\u0020) 填充,直到总字符数等于宽度。默认情况下,填充在左侧。如果给出了 '-' 标志,则填充将在右侧。如果未指定宽度,则没有最小值。
PS:\u0020 是代表空格的 Unicode 字符。
希望这能帮助到你。
String.format
的文档?这种行为恰好符合规范。 - Mark Peters