Java: вывести двумерный массив строк в виде таблицы с выравниванием по правому краю

StackOverflow https://stackoverflow.com/questions/275338

  •  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
System.out.print их, используя 2 вложенных для циклов

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top