2012-07-18 91 views
10

爲什麼這樣做的工作?:OK的String.format()需要一個數組作爲一個參數

String f = "Mi name is %s %s."; 
System.out.println(String.format(f, "John", "Connor")); 

而且這並不?:

String f = "Mi name is %s %s."; 
System.out.println(String.format(f, (Object)new String[]{"John","Connor"})); 

如果該方法的String.format需要一個可變參數目的?

它編譯好,但是當我執行這個String.format()將可變參數對象作爲一個唯一的參數(數組本身的toString()值),所以它拋出一個MissingFormatArgumentException,因爲它不能匹配第二個字符串說明符(%s)。

我該如何讓它工作? 在此先感謝,任何幫助將不勝感激。

+0

不確定,但是您可以在不將字符串數組轉換爲對象的情況下進行檢查嗎? – 2012-07-18 05:51:21

回答

4

問題是在轉換到Object之後,編譯器不知道你傳遞了一個數組。嘗試將第二個參數投射到(Object[])而不是(Object)

System.out.println(String.format(f, (Object[])new String[]{"John","Connor"})); 

或者只是不使用強制在所有:

System.out.println(String.format(f, new String[]{"John","Connor"})); 

(多一點信息見this answer。)

+1

謝謝,它適用於Object [] cast。演員陣容對於避免編輯警告是必要的。再次感謝。 – mevqz 2012-07-18 06:02:44

+1

@Dragurne - 爲了避免編譯器警告和轉換,你可以使用'new Object [] {「John」,「Connor」}'。 – 2012-07-18 06:16:54

12

使用此:(我會推薦這種方式)

String f = "Mi name is %s %s."; 
System.out.println(String.format(f, (Object[])new String[]{"John","Connor"})); 

OR

String f = "Mi name is %s %s."; 
System.out.println(String.format(f, new String[]{"John","Connor"})); 

但是,如果您使用這種方式,您將得到以下警告: 爲了調用varargs方法格式(String,Object ...),應將String []類型的參數顯式轉換爲Object []鍵入String。它也可以被轉換爲Object來進行可變參數調用

相關問題