Podwójne spacje

Odpowiedz Nowy wątek
2019-04-15 12:45
0

Chciałem napisać metodę, która będzie pozbywała się z ciągu znaków podwójnych spacji. Nie do końca mi to wyszło i metoda zwraca mi dwa złączone ciągi znaków: jeden z podwójną spacją, a drugi bez. Może ktoś ma pomysł jak pozbyć się tego błędu?

public static StringBuilder removeUnwantedSpaces(StringBuilder text) {
for(String space: text.toString().split(" ")) {

        if (!space.equals("")) {
            text.append(space + " ");
        }
    }

    return new StringBuilder(text);
}

Pozostało 580 znaków

2019-04-15 13:11
0
"string . spacje . ".replace("  ", "")
to raczej nie zadziała - UltimateRaven 2019-04-15 13:36

Pozostało 580 znaków

2019-04-15 14:11
0

Użyj

replaceAll("\\s+", " ").

\s oznacza wyrażenie regularne, które "łapie" między innymi spację. + oznacza, że jeden lub więcej dopasowań

próbowałem w ten sposób ale StringBuilder w nagłówku metody mi przeszkadza a nie mogę modyfikować nagłówka - UltimateRaven 2019-04-15 14:26

Pozostało 580 znaków

2019-04-15 15:29
0
template<typename InputIter, typename OutIter, typename T>
OutIter copyRemovingDuplicatesOf(InputIter b, InputIter e, OutIter out, T val)
{
    while (b != e) {
        while (b != e && *b != val) {
             *out++ = *b++;
        }
        if (b != e) *out++ = *b++;
        while (b != e && *b == val) {
             b++;
        }
    }
    return out;
}

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
Wątek dotyczy Javy a nie C++ :) - au7h 2019-04-15 15:33
ślepy jestem. Przepisałbym to na Java generis gdybym miął więcej wprawy z Java. - MarekR22 2019-04-15 15:39
doceniam pomoc, ale c++ mi się dzisiaj nie przyda :D - UltimateRaven 2019-04-15 16:33

Pozostało 580 znaków

2019-04-15 22:24
0

W zasadzie to prawie zrobiłeś:

public static StringBuilder removeUnwantedSpaces(StringBuilder text) {
        StringBuilder result = new StringBuilder();
        for(String space: text.toString().split(" ")) {

            if (!space.equals("")) {
                result.append(space + " ");
            }
        }

        return new StringBuilder(result);
    }

    public static void main(String[] args) {
        System.out.println(removeUnwantedSpaces( new StringBuilder("Panie    " +
                "kapitanie    , a co   by Pan zrobił jakby się okazało, że pańska    siorka   opierdala kiełbachy kosmitom")));
    }

Bardzo lubie Singletony, dlatego robię po kilka instancji każdego.
edytowany 1x, ostatnio: jarekr000000, 2019-04-15 22:25

Pozostało 580 znaków

2019-04-16 07:40
0

W mojej opinii najlepiej byłoby połączyć to co zostało zaproponowane przez @kixe52 z @jarekr000000 i uzyskać zarówno przejrzystość jak i poprawność :) I zamienić implementację tego drugiego na

    public static StringBuilder removeUnwantedSpaces(StringBuilder text) {
        var resultWithoutDoubleSpaces = text.toString().replaceAll("\\s{2,}", " ");

        return new StringBuilder(resultWithoutDoubleSpaces);
    }
czemu var jak to na pewno String? - Julian_ 2019-04-17 22:33
W javie var zawsze jest na pewno 'czymś', na etapie kompilacji jest to już ustalane. Odkąd w projekcie mam javę 11 to prawie zawsze używam var'a, linie się skracają i są czytelniejsze, w przypadku jakiegoś refactoru i zmiany typu nie trzeba tego wszędzie zmieniać. - Kermii 2019-04-18 07:29

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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