Java:2D String配列を右揃えの表として出力します
-
07-07-2019 - |
質問
String [] []
配列のセルを右揃えのテーブルとして印刷する最良の方法は何ですか?たとえば、入力
{ { "x", "xxx" }, { "yyy", "y" }, { "zz", "zz" } }
出力を生成する必要があります
x xxx
yyy y
zz zz
これは、 java.util.Formatter
を使用して 達成できるもののように見えますが、一定でないフィールド幅を許可していないようです。最良の答えは、スペース文字を手動で挿入するのではなく、テーブルセルのパディングに標準的な方法を使用することです。
解決
実際、フィールドの幅を指定する場合は、右揃えにする必要があります。
最長の文字列に対して最小の動的パディングが必要な場合は、配列を歩いて最大幅を取得し、この最大値から計算された幅でフォーマット文字列を生成し、出力のフォーマットに使用する必要があります。
他のヒント
各列に動的に生成されたフォーマット文字列を使用した回答です:
public static void printTable(String[][] table) {
// Find out what the maximum number of columns is in any row
int maxColumns = 0;
for (int i = 0; i < table.length; i++) {
maxColumns = Math.max(table[i].length, maxColumns);
}
// Find the maximum length of a string in each column
int[] lengths = new int[maxColumns];
for (int i = 0; i < table.length; i++) {
for (int j = 0; j < table[i].length; j++) {
lengths[j] = Math.max(table[i][j].length(), lengths[j]);
}
}
// Generate a format string for each column
String[] formats = new String[lengths.length];
for (int i = 0; i < lengths.length; i++) {
formats[i] = "%1<*>quot; + lengths[i] + "s"
+ (i + 1 == lengths.length ? "\n" : " ");
}
// Print 'em out
for (int i = 0; i < table.length; i++) {
for (int j = 0; j < table[i].length; j++) {
System.out.printf(formats[j], table[i][j]);
}
}
}
最も長い文字列の長さを見つける。
その長さ+ 1になるまで、すべての文字列をスペースで左に埋めます
2つのネストされたforループを使用してSystem.out.printします
所属していません StackOverflow