Java: Легче красиво печатать?

В конце моих вычислений я печатаю результаты:

System.out.println("\nTree\t\tOdds of being by the sought author");

for (ParseTree pt : testTrees) {
 conditionalProbs = reg.classify(pt.features());

 System.out.printf("%s\t\t%f", pt.toString(), conditionalProbs[1]);
 System.out.println();
}

Это производит, например:

Tree  Odds of being by the sought author
K and Burstner  0.000000
how is babby formed answer  0.005170
Mary is in heat  0.999988
Prelim  1.000000

Просто помещать туда два \t довольно неуклюже — столбцы на самом деле не выстраиваются в линию. Я бы предпочел иметь такой вывод:

Tree                         Odds of being by the sought author
K and Burstner               0.000000
how is babby formed answer   0.005170
Mary is in heat              0.999988
Prelim                       1.000000

(примечание: у меня возникли проблемы с тем, чтобы текстовый редактор SO идеально выровнял эти столбцы, но, надеюсь, вы поняли идею.)

Есть ли простой способ сделать это, или я должен написать метод, чтобы попытаться понять это на основе длины строки в столбце «Дерево»?


person Nick Heiner    schedule 09.12.2009    source источник


Ответы (6)


Вы ищете длины полей. Попробуйте использовать это:

printf ("%-32s %f\n", pt.toString(), conditionalProbs[1])

-32 говорит вам, что строка должна быть выровнена по левому краю, но с длиной поля 32 символа (настройте по своему вкусу, я выбрал 32, так как это кратно 8, что является нормальной остановкой табуляции на терминале). Использование того же самого в заголовке, но с %s вместо %f также сделает эту строку красивой.

person falstro    schedule 09.12.2009

Что вам нужно, так это потрясающий, но бесплатный format().

Он работает, позволяя вам указывать заполнители в строке шаблона; он создает комбинацию шаблона и значений в качестве вывода.

Пример:

System.out.format("%-25s %9.7f%n", "K and Burstner", 0.055170);
  • %s — это заполнитель для строк;
  • %25s означает заполнение любой заданной строки пробелом до 25 символов.
  • %-25s означает выравнивание строки по левому краю в поле, т. е. дополнение справа от строки.
  • %9.7f означает вывод числа с плавающей запятой с 9 знаками всего и 7 справа от десятичной точки.
  • %n необходимо, чтобы "выполнить" завершение строки, чего в противном случае вам не хватает, когда вы переходите от System.out.println() к System.out.format().

В качестве альтернативы вы можете использовать

String outputString = String.format("format-string", arg1, arg2...);

для создания выходной строки, а затем используйте

System.out.println(outputString);

как прежде, чтобы распечатать его.

person Carl Smotricz    schedule 09.12.2009
comment
неправильно разместил \n в строке формата %9.7\nf... и мог использовать %n, как в "%-25s %9.7f%n". - person user85421; 10.12.2009

Как насчет

System.out.printf("%-30s %f\n", pt.toString(), conditionalProbs[1]);

дополнительную информацию о Formatter mini см. в документации. -язык.

person Jonathan Feinberg    schedule 09.12.2009


Используя j-text-utils, вы можете распечатать для консоли следующую таблицу:

И это так же просто, как:

TextTable tt = new TextTable(columnNames, data);                                                         
tt.printTable();   

API также позволяет сортировать и нумеровать строки...

person daniel_or_else    schedule 25.12.2013
comment
Выглядит хорошо. Некоторым из нас до сих пор приходится генерировать отчеты без HTML :) - person Thorbjørn Ravn Andersen; 18.08.2014
comment
@Daniel_or_else, вы можете отредактировать свою ссылку: github.com/mkotyk/j-text-utils< /а>. Кстати, спасибо! - person Auzias; 03.03.2016

Возможно, printf и/или format - это то, что вы ищете...

person Nivas    schedule 09.12.2009