2014-03-06 217 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字符。

希望這會有所幫助。

相關問題