2012-04-03 28 views
3

我想通過一個字符串對象到Java中的System.out.printf(...),但我一直得到這個錯誤"java.util.FormatFlagsConversionMismatchException: Conversion = s, Flags = 0",這實際上並沒有對我很有意義。爲什麼我不能在java中將一個變量作爲格式字符串傳遞給System.out.printf(...)?

String format = "%" + (3 * n) + "s"; // n is an int defined somewhere above, could be 0 
System.out.printf(format, "My string"); 

有誰知道這是否允許?

編輯瞭解詳情:

int n = 0; 
String fm = "%" + (3 * level) + "s"; 
String realFm = "%0s"; 
System.out.println("fm = " + fm); 
System.out.println("realfm = " + realFm); 
System.out.println("equals? " + (fm.equals(realFm))); 
System.out.printf(fm, " "); 

下面是輸出:

fm = %0s 
realfm = %0s 
equals? true 
java.util.FormatFlagsConversionMismatchException: Conversion = s, Flags = 0 

感謝

+2

你更新後的代碼仍然不顯示的例子其中n不是零。格式字符串'%0s'無效。 – 101100 2012-04-03 16:49:54

回答

10

是的,它是允許的,但如果n爲0,它不會工作是否有發生這種情況的機會(看起來像是從錯誤信息中看到的)?

如果添加什麼一行代碼進行調試:

// line added below for debugging. To remove later: 
System.out.println("n is: " + n); 

String format = "%" + (3 * n) + "s"; // n is an int defined somewhere above 
System.out.printf(format, "My string"); 

是否曾經打印n is: 0?

例如,

public static void main(String[] args) { 

    // try the for loop with n = 0 vs. n = 1 
    for (int n = 1; n <= 10; n++) { 
    // line added below for debugging. To remove later: 
    System.out.println("\nn is: " + n); 

    String format = "%" + (3 * n) + "s"; 
    System.out.printf(format, "My string"); 
    }  
} 
+0

我已更新該帖子,詳細介紹了代碼和輸出。請檢查。謝謝 – user113454 2012-04-03 16:38:06

+0

@ user1064918:我給出的答案是正確的 - 標誌不能爲0.您需要修復代碼以防止發生這種情況。 – 2012-04-03 16:52:05

+0

我明白了。謝謝!! – user113454 2012-04-03 16:58:26

相關問題