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
Odpowiedz
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 woutput
jest traktowana indywidualnie, zamiast traktowaniaoutput
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
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
@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
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
@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
Co powiesz na dzielenie ciągu na spacje i wstawianie łamania linii, gdy słowo przekracza szerokość linii? – Cephalopod