Форматирование вывода, чтобы иметь одинаковое количество столбцов - PullRequest
4 голосов
/ 10 января 2012

Я хочу создать что-то вроде этого, где каждая строка окружена символом "pipe".

| First Line |
| 100 200    |
| 1000 2000  |
  • В первой строке правый отступ равен 1 пробелу.
  • Во второй строке правый отступ - 4 пробела.
  • В третьей строке 2 пробела.

Я пытаюсь сделать это с помощью форматирования printf + (а не явно вычислять число заполнения), но у меня возникли некоторые проблемы с синтаксисом форматирования. Вот мой текущий код:

System.out.printf("| FIRST LINE" + "%50s\n", "|");
System.out.printf("| 100 200" + "%50s", "|");
System.out.printf("| 1000 2000" + "%50s", "|");

Я пытаюсь указать, что максимальный размер строки составляет 50 символов, поскольку первый символ в строке - «труба», а последний символ в строке - еще один «труба»).

Проблема в том, что 50 пробелов размещаются без учета символов, уже использованных в левой части (т. Е. "| ПЕРВАЯ ЛИНИЯ"). Код выше похож на:

System.out.format("%s %50s\n", "| FIRST LINE", "|");

Итак, как я могу определить выходной формат, чтобы обе строки учитывались для ширины?

Заранее спасибо.

Ответы [ 3 ]

6 голосов
/ 10 января 2012

Попробуйте Formatter.

, например

StringBuffer sb = new StringBuffer();
Formatter f = new Formatter(sb, Locale.getDefault());
f.format("| %-50s |%n", "FIRST LINE");
f.format("| %-50s |%n", "200 100");
f.format("| %-50s |%n", "1000 2000");
String finalResult = sb.toString();
System.out.println(finalResult);

Выход:

| FIRST LINE                                         |
| 200 100                                            |
| 1000 2000                                          |
0 голосов
/ 10 января 2012

Что-то, что автоматически выберет отступ, равный самой длинной строке плюс два символа (как | FIRST LINE | выше), невозможно, но было бы довольно аккуратно.

Лучшее, что я могу помочьВы с следующим:

    System.out.println(String.format("| %10s |", "FIRST LINE" ));
    System.out.println(String.format("| %10s |", "100 200" ));
    System.out.println(String.format("| %10s |", "1000 2000" ));

Надеюсь, что помогает.

0 голосов
/ 10 января 2012

Вы можете использовать StringBuilder .У него есть методы для установки символов и замены строк.Сначала создайте StringBuilder и заполните его символами, содержащими только пробелы и конец строк.Затем поместите символ трубы в нужном месте.Наконец, замените пробелы в середине отформатированной строкой.Не забудьте подсчитать символы новой строки или выполнить указанную строку метода для строки и добавить строки вместе, используя другой StringBuilder.

...