2009-12-09 2 views
7

A la fin de mes calculs, j'imprimer les résultats:Java: Une jolie impression plus facile?

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

Ce produit, par exemple:

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 

Juste mettre deux \t là-dedans est un peu maladroit - les colonnes ne sont pas vraiment s'aligner. Je préfère avoir une sortie comme ceci:

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 

(Note:. Je vais avoir du mal à faire la ligne d'éditeur de texte SO jusqu'à ces colonnes parfaitement, mais nous espérons que vous avez l'idée)

est-il un moyen facile de le faire, ou dois-je écrire une méthode pour essayer de le comprendre en fonction de la longueur de la chaîne dans la colonne "Tree"?

Répondre

14

Vous cherchez des longueurs de terrain. Essayez d'utiliser ceci:

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

Le -32 vous indique que la chaîne doit être justifié à gauche, mais avec une longueur de champ de 32 caractères (ajuster à votre goût, je pris 32 comme il est un multiple de 8, est un arrêt de tabulation normal sur un terminal). En utilisant la même chose sur l'en-tête, mais avec %s au lieu de %f fera bien cette ligne aussi bien.

4

Ce dont vous avez besoin est l'étonnant et gratuit format().

Cela fonctionne en vous permettant de spécifier des espaces réservés dans une chaîne de modèle; il produit une combinaison de modèle et de valeurs en sortie.

Exemple:

System.out.format("%-25s %9.7f%n", "K and Burstner", 0.055170); 
  • %s est un espace réservé pour cordes;
  • %25s signifie blanc-pad toute chaîne donnée à 25 caractères. Le moyen
  • %-25s signifie à gauche de justifier la chaîne dans le champ, c'est-à-dire le pavé à droite de la chaîne.
  • %9.7f signifie produire un nombre à virgule flottante avec 9 emplacements au total et 7 à droite de la décimale.
  • %n est nécessaire de "faire" une terminaison de ligne, ce qui est ce qui vous manque par ailleurs lorsque vous passez de System.out.println() à System.out.format().

Vous pouvez également utiliser

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

pour créer une chaîne de sortie, puis utilisez

System.out.println(outputString); 

comme avant de l'imprimer.

+0

a mal placé le '\ n' dans la chaîne de format'% 9.7 \ nf' ... et pourrait utiliser '% n' comme dans' "% -25s% 9.7f% n" '. –

+0

Ack, bonne prise, merci! Fixé. –

0

Peut-être la méthode java.io.PrintStream « s printf et/ou format est ce que vous cherchez ...

1

En utilisant j-text-utils vous pouvez imprimer à la console comme une table:

Et aussi simple que:

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

L'API permet également le tri et la numérotation des lignes ...

+1

Ça a l'air bien. Certains d'entre nous doivent encore générer des rapports sans HTML :) –

+0

@Daniel_or_else vous voudrez peut-être modifier votre lien: https://github.com/mkotyk/j-text-utils. Merci d'avance! – Auzias

Questions connexes