2011-07-06 21 views
4

在嵌套地圖的「漂亮打印」函數中,我需要一個簡單的縮進函數來將所需的空間預先添加到我的結構中。 我想要一個簡單的單線程,我發現最好的是一個2線解決方案。 理想情況下,我想這一點:單線程可變空間縮進

String indentSpace = new String(Arrays.fill(new char[indent], 0, indent-1, ' ')); 

這不起作用,因爲Arrays.fill不是「通順」;它返回void。

是表達的直譯是我喜歡太冗長:

char[] chars = new char[indent]; 
Arrays.fill(chars , ' '); 
String indentSpace = new String(chars); 

最後,我選定了一個缺乏光澤2線的解決方案:

private final String indentSpace="              "; 
... 
String alternative = indentSpace.substring(0,indent % indentSpace.length()); 

這是次要的NIT-挑選,但我仍然對是否有更優雅的解決方案感到好奇。我認爲最後的選擇可能是一個很好的選擇,在性能方面。

任何需要?

+0

有一個在Apache的百科全書,以幫助有用的東西與此,請參見'StringUtils'類 – vickirk

+0

或者也許你可以編寫自己的實用程序方法來做到這一點 – Premraj

回答

8

下面的一行代碼應該工作:

String indentSpace = new String(new char[indent]).replace('\0', ' '); 
4

如果確實行數是你的主要測量那麼這是創建一個Stringn空間的小型方式:

String spaces = n == 0 ? "" : String.format("%" + n + "s", ""); 

性能可能不是那麼大。

+0

線計數的'主要'的關注,但肯定不是唯一的:-) – maasg

1

如果您需要創建與它只是一個空格字符串,然後StringUtils.repeat將工作:

String indentSpace = StringUtils.repeat(' ', indent); 
+0

'leftPad'實際上並沒有墊一個字符串與一個縮進,而是它確保返回的字符串至少是* n *字符長(其中* n *在您的示例中是'indent')。 –

+0

是的...不是一個非常有用的建議... – lexicalscope