2009-12-09 6 views
7

Pod koniec moich obliczeń, wydrukować wyniki:Java: Łatwiejsze drukowanie?

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(); 
} 

produkuje to, na przykład:

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 

tylko wprowadzenie dwóch \t tam jest jakby niezdarny - kolumny naprawdę nie uszeregować. Wolałbym mieć wyjście takiego:

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 

(uwaga:. Mam problemy z podejmowania linii edytora tekstu, aby po tych kolumn idealnie, ale mam nadzieję, że masz pomysł)

Czy istnieje Łatwy sposób to zrobić, czy muszę napisać metodę, aby spróbować dowiedzieć się na podstawie długości łańcucha w kolumnie "Drzewo"?

Odpowiedz

14

Szukacie długościach polowych. Spróbuj użyć tego:

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

-32 informuje, że ciąg powinien być wyrównany do lewej, ale o długości pola 32 znaków (dostosować do własnych upodobań, wybrałem 32, jak to jest wielokrotnością 8, który jest normalnym zatrzymaniem tabulatora na terminalu). Użycie tego samego w nagłówku, ale z %s zamiast z %f spowoduje, że również będzie się ładnie układał.

4

Potrzebne jest niesamowite, ale bezpłatne format().

Działa, umożliwiając określenie symboli zastępczych w ciągu szablonu; tworzy kombinację szablonu i wartości jako wynik.

przykład:

System.out.format("%-25s %9.7f%n", "K and Burstner", 0.055170); 
  • %s jest zastępczy dla pszczół;
  • %25s oznacza pusty-pad dowolnego podanego ciągu do 25 znaków.
  • %-25s oznacza lewe-uzasadnić ciąg w polu, tj. Pad po prawej stronie napisu.
  • %9.7f oznacza wyprowadzenie liczby zmiennoprzecinkowej z 9 miejscami we wszystkich i po 7 z prawej strony separatora dziesiętnego.
  • %n jest konieczne, aby "wykonać" zakończenie linii, czego nie brakuje w przypadku przejścia z System.out.println() do System.out.format().

Alternatywnie, można użyć

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

aby utworzyć ciąg wyjściowy, a następnie użyj

System.out.println(outputString); 

jak poprzednio, aby go wydrukować.

+0

źle umieścił '\ n' w ciągu znaków'% 9.7 \ nf' ... i może użyć '% n' jak w'% -25s% 9.7f% n "'. –

+0

Ack, dobry połów, dziękuję! Naprawiony. –

1

Korzystanie j-text-utils można drukować do konsoli tabeli jak:

I to tak proste, jak:

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

API umożliwia również sortowanie i numeracja wierszy ...

+1

Wygląda ładnie. Niektórzy z nas wciąż muszą generować raporty bez HTML :) –

+0

@Daniel_or_else możesz edytować swój link: https://github.com/mkotyk/j-text-utils. Dzięki Btw! – Auzias