2011-07-06 3 views
4

ネストマップの「きれいな印刷」機能では、構造に必要なスペースを追加するための簡単なインデント機能が必要です。 私はシンプルな1ライナーを望んでいました。私が見つけた最高のものは、2行の解決策でした。 理想的には、私はこれを望んでいた:可変スペースインデント用のワンライナー

Arrays.fillは「流暢」ではありませんので動作しません
String indentSpace = new String(Arrays.fill(new char[indent], 0, indent-1, ' ')); 

。 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 * chars long(* n *はあなたの例では 'indent'です)であることを保証します。 –

+0

はい...非常に有用な提案ではありません... – lexicalscope

関連する問題