救助へのjava.util.Formatter :
フォーマッタは、印刷するテキストを左揃えにし、幅を割り当てることができるため、テキストをスペースで埋めて、必要な幅をすべて占有し、スペースをドットに置き換えるだけです。次に例を示します。
import java.util.*;
public class Test
{
public static final synchronized strictfp void main(String[] args)
{
Map<String, Double> myData = new LinkedHashMap<String, Double>();
myData.put("Total", 24.0);
myData.put("App", 24.0);
myData.put("USB storage app", 0.0);
myData.put("Data", 0.0);
myData.put("SD card", 0.0);
for(Map.Entry myEntry : myData.entrySet())
{
Formatter myFormatter = new Formatter();
myFormatter.format("%1$-20s%2$15.2fKB", myEntry.getKey(), myEntry.getValue());
System.out.println(myFormatter.toString().replace(' ', '.'));
}
}
}
ここで興味深いのは、フォーマット文字列です。
%1$-20s
最初の引数 (1$) を左詰め (-) で最大幅 20 文字 (20) の文字列 (s) として出力します。
%2$15.2fKB\n
2 番目の引数 (2$) を最大幅 15 文字 (15) で小数点以下 2 桁 (.2) を float (f) として出力します。
つまり、最初の値は常に 20 文字に固定され、2 番目の値は常に 15 文字に固定されます。その場合、すべての行は常に 35 文字の長さ + KB サフィックス + 浮動小数点数の小数点になります。
上記のコードは、次の出力を生成します。
Total.........................24.00KB
App...........................24.00KB
USB.storage.app................0.00KB
Data...........................0.00KB
SD.card........................0.00KB
TODO: 最初の列の名前に正当なスペースを上書きしないでください ;)