2014-01-09 82 views
1

打印空白的空日期我使用PrintWriter.printf()功能使用以下格式編寫Java中的文件:Java的如何使用Java的printf

%1$s,%2$s,%3$s,%4$s,%5$tF,%n

這給了我這樣的輸出:

25563,XY63563,Greame,Thomas,1942-04-07, 

341411,YY2524522,Thayer,Michael,1945-03-19, 

472452,TR254252,Brook,null,null, 

有沒有一種方法可以自定義printf以獲得空白值的空白。

我可以對字符串值進行空檢查並將空值替換爲空白。我如何處理printf中的空日期值。

回答

0

我認爲你必須做這兩個步驟:

String formattedDate = (date == null) ? "" : String.format("%tF", date); 

然後用格式字符串再次使用printf

"%1$s,%2$s,%3$s,%4$s,%5$s,%n" 

formattedDate作爲第五個參數(這是現在格式化%s)。我沒有看到一種方式來獲取格式字符串以自定義的方式處理空值。

+0

所以沒有辦法通過printf函數來自定義空值處理。做單獨的空檢查過於冗長。我想用printf在一個語句中處理多個數據類型。在printf之外處理空值需要將每個數據值轉換爲字符串類型,然後進行打印。 –

+0

@pawindergupta我認爲這是正確的,'printf'和'String.format'沒有給你一個辦法。但是做一些像'printf(「%1 $ s,%2 $ s,%3 $ s,%4 $ s,%5 $ s,%n」,fmt(a),fmt(b),fmt(c )...)'對我來說似乎不是太繁重,你會爲不同的類型編寫一個重載的'fmt'方法,它可以爲null做任何特殊的事情。或者如果你真的很聰明,你可以爲'printf'編寫一個封裝器,它檢查它的'Object'參數爲null,對它們做一些特殊的處理,並使用'printf'來處理其餘部分。但是這需要你自己解析格式字符串。 – ajb