2009-05-27 13 views
6

Vorrei produrre un testo tabulare ben formattato da modelli di oggetti dataset arbitrari. C'è una buona libreria per farlo in Java?Come formattare i dati tabulari come testo in Java?

In particolare, voglio l'output che è formattato come strumenti di gestione dei dati da riga di comando come la CLI per mysql. Esempio:

+---------+--------------+------+-----+---------+-------+ 
| Field | Type   | Null | Key | Default | Extra | 
+---------+--------------+------+-----+---------+-------+ 
| name | varchar(100) | YES |  | NULL |  | 
| release | year(4)  | YES |  | NULL |  | 
| studio | varchar(50) | YES |  | NULL |  | 
| review | varchar(50) | YES |  | NULL |  | 
| gross | int(11)  | YES |  | NULL |  | 
+---------+--------------+------+-----+---------+-------+ 

Una sfida principale è che io non so automaticamente le larghezze massime delle colonne prima di iniziare l'attraversamento dei dati. Inoltre, ci sono molti casi limite, come la gestione di lunghezze di valore molto grandi e un numero elevato di righe e colonne.

Se devo costruirmi da solo, immagino che utilizzerei String.format e avrei bisogno di pre-analizzare il set di dati completo prima di iniziare l'output. Questo è un livello molto basso di programmazione, quindi mi piacerebbe trovare una buona libreria che abbia già risolto questo problema.

risposta

7

Check out TableFormatter: sembra fare ciò che si desidera per la formattazione dei dati tabulari. È anche disponibile il codice sorgente. È possibile aggiungere righe e celle a una tabella utilizzando un approccio di interfaccia fluente. Segue un esempio:

TableFormatter tf = new SimpleTableFormatter(true) // true = show border 
     .nextRow() 
      .nextCell() 
       .addLine("Field") 
      .nextCell() 
       .addLine("Type") 

Quindi costruisce le celle nel formato corretto e regola gli spazi di conseguenza. Permette inoltre di eseguire l'allineamento di base del testo all'interno della cella (centrale, superiore, inferiore)

+0

Grazie Jon, sembra esattamente * quello che stavo cercando! 8-] – dirtyvagabond

1

Per chi fosse interessato, I have forked TableFormatter (che è doppia licenza GPL e MIT) per rendere più generici-friendly e rimuovere tutte le avvertenze di compilazione.

Nota che utilizzo l'operatore Java 7 diamond in modo che per renderlo compatibile con Java 6 sia necessario aggiungere i tipi nelle dichiarazioni degli elenchi.

Problemi correlati