2013-04-08 5 views
6

Czy ktoś może zaproponować metodę zapisania łańcucha typu Mutli-Line na konsoli systemowej i wstawienia tego bloku tekstu? Szukam czegoś stosunkowo lekkiego, ponieważ jest używany tylko do wyświetlania pomocy dla programu wiersza poleceń.Jak wcięcie wielowierszowego akapitu zapisywanego na konsoli w java

+1

Czy masz ciąg, który zawiera linebreaks, czy chcesz automatycznego zawijania, czy masz po prostu wiele linii i chcesz je wyrównać w pewnym formacie tabelarycznym? W skrócie: proszę podać przykład danych wejściowych i pożądanych wyników. – Cephalopod

+1

@Arian. Chciałbym automatycznego owijania. Coś podobnego do sposobu formatowania stron man. Miałem nadzieję na coś lekkiego, ale może jakaś forma szablonu języka jest jedyną drogą. – BillMan

+0

Co powiesz na dzielenie ciągu na spacje i wstawianie łamania linii, gdy słowo przekracza szerokość linii? – Cephalopod

Odpowiedz

26

UWAGA: Opisane poniżej podejście nie spełnia zaktualizowanych wymagań opisanych przez @BillMan w komentarzach do pytania. Ten nie będzie automatycznie owijał linii, które są dłuższe niż długość linii konsoli - używaj tego tylko, jeśli zawijanie nie jest problemem.


Jako prosty opcji, można użyć String.replaceAll() następująco:

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

Jeśli jesteś zaznajomiony z wyrażeń regularnych Java, działa w następujący sposób:

  • (?m) włącza tryb multilinii. Oznacza to, że każda linia w output jest traktowana indywidualnie, zamiast traktowania output jako pojedynczej linii (która jest domyślna).
  • ^ to wyrażenie regularne odpowiadające początkowi każdego wiersza.
  • \t powoduje zastąpienie każdego dopasowania poprzedniego wyrażenia regularnego (tj. Początek każdej linii) znakiem tabulacji.

Jako przykład, następujący kod:

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

Wytwarza to wyjście:

 
	foo 
	bar 
	baz 
+0

Nie sądzę, że to jest to, czego szuka OP, jako linii, które są zbyt długie są zawijane przez konsolę, a nie wcięte. Myślę, że potrzebna jest tutaj metoda, która a) zawija się do N-e-znaku (np. 80 znaków), ale dzieli się na słowa i b) wcina każdą linię, nawet te, które zostały zawinięte. – joelittlejohn

+1

@joelittlejohn: masz rację - zaktualizowane wymagania (dodane jako komentarze * po * ostatnie spojrzenie na to pytanie) nie są spełnione przez podejście, które opisuję. Mimo to nadal może być przydatna dla osób o podobnych wymaganiach. Dodałem zastrzeżenie do tego efektu na górze. Dziękuję za zwrócenie mi tej uwagi. – Mac