2014-09-24 48 views
0

我有用於格式化字符串的現有Java代碼。下面的格式代碼失敗 - java.util.FormatFlagsConversionMismatchException:..基於其他SO問題,我發現它更多地與Java版本有關。java中的Amerpsand格式標誌

問題..

  1. 什麼的 '%1 $#' 格式does..Mostly我不是能找到 '$' & '#' 格式規則,而我用Google搜索。

  2. 如何解決這個問題?

Java代碼

String test = String.format("%1$#" + 2 + "s", 01); 
+1

'java.util.Formatter' javadoc。 – 2014-09-24 14:35:36

+0

「和號」在哪裏? – 2014-09-24 14:38:23

+0

[Octothorp](http://en.wikipedia.org/wiki/Number_sign#Other_names_in_English)!! – 2014-09-24 14:40:40

回答

1

java.util.Formatter文檔:

的格式說明一般,性格類型和數值類型的語法如下:

%[argument_index$][flags][width][.precision]conversion 

所以%1$#2s的argument_index的1 #一個標誌值(「結果應該使用轉換依賴性替代形式」),2的寬度轉換s(字符串) 。

對於%s轉換,交替形式使用通過它傳遞給Formattable

如果參數爲空值,則結果爲"null"。如果參數實現Formattable,則調用其方法formatTo。否則,通過調用參數的toString()方法獲得結果。

如果給出'#'標誌並且參數不是Formattable,則會拋出FormatFlagsConversionMismatchException

我懷疑你在這種情況下並不是真的想要#

0

你可以閱讀關於格式化here。你的代碼中的錯誤是#在你的情況下是無效的FormatFlag(#mean結果應該使用一個依賴於轉換的替代形式)。您可以使用例如s or d這樣打印

System.out.println(String.format("%1$d" + 2 + "s", 01));