为什么String.Format(“%1s”,“”)没有返回“”而是“”?

时间:2014-03-06 16:56:48

标签: java string

String.format("%1s","").equals("")); // --> return false !
String.format("%1s","").equals(" ")); // --> return true !
  • 为什么会这样?
  • 空间来自哪里?

3 个答案:

答案 0 :(得分:12)

空格由格式说明符

中的最小宽度值1指定
String.format("%1s","").equals(" ")
                ^

答案 1 :(得分: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

答案 2 :(得分:1)

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

%[flags][width]conversion

其中

  

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

  

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

因此,1指定宽度,以下是您获取" "而不是""的原因背后的描述

  

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

PS: \ u0020 Space的Unicode字符。

希望这有帮助。