質問

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します

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top