2013-04-08 1 views
6

Qualcuno può suggerire un metodo per scrivere una stringa mutli-line su una console di sistema e avere quel rientro del testo? Sto cercando qualcosa di relativamente leggero perché è utilizzato solo per visualizzare l'aiuto per un programma a riga di comando.Come rielaborare un paragrafo su più righe nella console in java

+1

Avete una stringa che contiene le interruzioni di linea, o vuoi auto-wrapping, o fare hai solo più linee e vuoi allinearle in qualche formato tabellare? In breve: fornire un esempio di input e output desiderato. – Cephalopod

+1

@Arian. Mi piacerebbe l'auto-wrapping. Qualcosa di simile a come le pagine man sono formattate. Speravo in qualcosa di leggero, ma forse una sorta di linguaggio modello è l'unico modo. – BillMan

+0

Che dire della divisione della stringa negli spazi e l'inserimento di un'interruzione di riga ogni volta che una parola supera la larghezza della linea? – Cephalopod

risposta

26

NOTA: L'approccio descritto di seguito non soddisfa i requisiti aggiornati descritti da @BillMan nei commenti della domanda. Questo non sarà il automaticamente avvolgere le righe che sono più lunghe della lunghezza della riga della console - utilizzare questo approccio solo se il wrapping non è un problema.


Come una semplice opzione, è possibile utilizzare String.replaceAll() come segue:

String output = <your string here> 
String indented = output.replaceAll("(?m)^", "\t"); 

Se si ha familiarità con le espressioni regolari Java, funziona come segue:

  • (?m) abilita la funzione multilinea. Ciò significa che ogni riga in output viene considerata singolarmente, invece di trattare output come una singola riga (che è l'impostazione predefinita).
  • ^ è un'espressione regolare che corrisponde all'inizio di ogni riga.
  • \t causa la corrispondenza di ogni corrispondenza della regex precedente (vale a dire l'inizio di ogni riga) con un carattere di tabulazione.

A titolo di esempio, il seguente codice:

String output = "foo\nbar\nbaz\n" 
String indented = output.replaceAll("(?m)^", "\t"); 
System.out.println(indented); 

produce questo risultato:

 
	foo 
	bar 
	baz 
+0

Non penso che questo sia ciò che l'OP sta cercando, come linee che sono troppo lunghi sono avvolti dalla console e non rientrano. Penso che ciò che è necessario qui sia un metodo che a) esegue il wrapping al limite N char (ad esempio 80 caratteri) ma divide su parole eb) fa rientrare ogni riga, anche quelle che sono state spostate. – joelittlejohn

+1

@joelittlejohn: hai ragione: i requisiti aggiornati (aggiunti come commenti * dopo * che ho esaminato per l'ultima volta questa domanda) non sono soddisfatti dall'approccio che descrivo. Potrebbe comunque essere un consiglio utile per gli altri con requisiti simili. Ho aggiunto un disclaimer in tal senso nella parte superiore. Grazie per averlo portato alla mia attenzione – Mac