2014-03-06 164 views
3
String.format("%1s","").equals("")); // --> return false ! 
String.format("%1s","").equals(" ")); // --> return true ! 
  • 这是怎么发生的?
  • 空间从哪里来?
+0

你有看过['String.format'](http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#syntax)的文档吗?此行为与指定的完全相同。 –

+1

我实际上对%1 $ s说明符感到困惑,它确实如指定的那样。 – C4stor

回答

9

的空间被最小宽度值1指定格式说明

String.format("%1s","").equals(" ") 
       ^
+0

Whao。在这里,我认为它与之后传递的参数的顺序有关。谢谢 – C4stor

+0

+1。具体地说,'1'是* width *,即(来自Javadoc)“要写入输出的最小字符数”。 – ruakh

+0

@ C4stor:你正在考虑'%1 $ s'。参数索引后需要美元符号。 – ruakh

1

你想添加的参数指标这样

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

1

这里%1s是一个格式说明符,它没有任何参数。为无参数的格式说明的一般语法如下

%[flags][width]conversion 

其中

可选标志是一组修改的输出格式的字符。有效标志的集合取决于转换。

可选宽度是一个非负十进制整数表示的最小字符数被写入到输出。

所以,1指定宽度,这里是为什么你" "后面的描述,并且不""

的宽度将被写入到输出的最少字符数。如果转换值的长度小于宽度,则输出将被填充''(\ u0020'),直到字符的总数等于宽度。默认情况下,填充位于左侧。如果给出' - '标志,那么填充将在右侧。如果宽度没有被指定,那么没有最小值。

PS:\ u0020Space Unicode字符。

希望这会有所帮助。

相关问题