Java:更漂亮的打印?

时间:2009-12-09 18:41:48

标签: java console pretty-print

在我的计算结束时,我打印结果:

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文本编辑器完美地排列这些列,但希望你能得到这个想法。)

有没有一种简单的方法可以做到这一点,或者我必须编写一个方法来尝试根据“树”列中字符串的长度找出它吗?

6 个答案:

答案 0 :(得分:15)

您正在寻找场长。试试这个:

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

-32告诉你字符串应该是左对齐的,但字段长度为32个字符(根据你的喜好调整,我选择了32,因为它是8的倍数,这是终端上的正常制表位)。在标题上使用相同内容,但使用%s代替%f也可以很好地使用这一行。

答案 1 :(得分:4)

你需要的是惊人的免费format()

它的工作原理是让你在模板字符串中指定占位符;它产生模板和值的组合作为输出。

示例:

System.out.format("%-25s %9.7f%n", "K and Burstner", 0.055170);
  • %s是Strings的占位符;
  • %25s表示将任意给定的字符串空白填充为25个字符。
  • %-25s表示在字段中左对齐字符串,即填充字符串右侧。
  • %9.7f表示输出一个浮点数,其中包含9个位数,7位在小数点右侧。
  • %n是“执行”行终止所必需的,这是您从System.out.println()转到System.out.format()时所遗漏的内容。

或者,您可以使用

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

创建输出String,然后使用

System.out.println(outputString);
像以前一样打印它。

答案 2 :(得分:2)

怎么样

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

请参阅more information on the Formatter mini-language的文档。

答案 3 :(得分:1)

答案 4 :(得分:1)

使用j-text-utils您可以打印以控制表格,如:

它很简单:

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

API还允许排序和行编号......

答案 5 :(得分:0)

或许java.io.PrintStream的{​​{3}}和/或printf方法正在寻找...