Metoda do wyświetlania tekstu z łamaniem wierszy

0

Mam długiego Stringa i chciałbym wyświetlić go podając jakiejś metodzie dodatkowy parametr, który by określił ile znaków wyświetlić w jednym wierszu. Istnieje taka metoda?

0

Java to nie NodeJS zeby do jednej linijki kodu była potrzebna biblioteka. Można by do tego użyć czegoś z Guavy albo Apache Commons, ale mozesz też napisać to samemu.
String ma metodę substring która wydziela z niego kawałek.

    public static Stream<String> chunk(String input, int size) {
        int numberOfChunks = ((input.length() + size - 1) / size);
        return IntStream.range(0, numberOfChunks)
                .mapToObj(idx -> input.substring(idx * size, Math.min((idx + 1) * size, input.length())));
    }

Wiemy że takich chunków będziemy mieli length/size +-1 w zależności od tego czy string ma długość która jest wielokrotnością size czy nie. Dalej wiemy że dla każdego i-tego chunka chcemy wykroić kawałek od size*i do size*(i+1).
Ten min na końcu bo javowy subtring jest słaby i nie lubi jak damy mu index dalszy niż koniec stringa, wiec ostatni chunk trzeba przyciąć.

Teraz możesz zrobić jakieś:

        String data = "some very long string";
        String chunkedAndJoined = chunk(data, 2).collect(Collectors.joining("\n"));
0
haracz napisał(a):

Mam długiego Stringa i chciałbym wyświetlić go podając jakiejś metodzie dodatkowy parametr, który by określił ile znaków wyświetlić w jednym wierszu. Istnieje taka metoda?

O rany, co ten Shalom tam jakaś znowu matematykę wyższą naklepał, tu masz w pythonowym stylu (może i działa 5 razy wolniej, ale za to gorzej).

import java.util.Arrays;

System.out.println(String.join("\n", Arrays.asList("Hello World! Hello World! Hello World!".split("(?<=\\G.{7})"))));

Tylko nie pytaj mnie jak ten regex działa, znalazłem na SO. Tylko głupi by nie ukradł.

0

Dzięki Panowie, wypróbowałem oba sposoby i działają, ale nie wziąłem pod uwagę paru rzeczy. Ten String to słowa i trzeba mieć na uwadze spacje między słowami, żeby nie ucięło wyrazu w połowie. Druga kwestia jest taka, że przejście do nowej linii nie powinno kończyć się pojedynczą literą. I kolejna rzecz - w tekście są już entery, które wskazują na koniec akapitu i te entery musiały by zostać na swoim miejscu niepowielone kolejnym enterem. I pytanie czy jakbym potem robił interfejs graficzny w JavaFX musiałbym wykorzystać te same metody czy w JavaFX istnieje coś takiego jak zawijanie wierszy w zależności od wielkości pola tekstowego?
Namieszałem? ;)

0
haracz napisał(a):

Dzięki Panowie, wypróbowałem oba sposoby i działają, ale nie wziąłem pod uwagę paru rzeczy. Ten String to słowa i trzeba mieć na uwadze spacje między słowami, żeby nie ucięło wyrazu w połowie. Druga kwestia jest taka, że przejście do nowej linii nie powinno kończyć się pojedynczą literą. I kolejna rzecz - w tekście są już entery, które wskazują na koniec akapitu i te entery musiały by zostać na swoim miejscu niepowielone kolejnym enterem. I pytanie czy jakbym potem robił interfejs graficzny w JavaFX musiałbym wykorzystać te same metody czy w JavaFX istnieje coś takiego jak zawijanie wierszy w zależności od wielkości pola tekstowego?

Namieszałem? ;)

obczaj po pierwsze: https://howtodoinjava.com/java/string/4-ways-to-split-tokenize-strings-in-java/
Niestety nie znam JavyFX i nie mam ochoty jej poznawać, może jest tam jakiś magiczny sposób na automatyczne zawijanie wyrazów w okienku.

1

ale nie wziąłem pod uwagę paru rzeczy

xD @haracz dokładnie tak wygląda zbieranie wymagań w pracy :D Klient mówi ze on chce tylko pociąć stringa na kawałki o długości X, a potem okazuje się że w zasadzie to jest prawie ok, tylko trzeba dograć kilka szczegółów. Przypuszczam ze jakiś komponent od pola tekstowego będzie miał wbudowany taki ficzer.

1 użytkowników online, w tym zalogowanych: 0, gości: 1