Podwójne spacje

Podwójne spacje
UR
  • Rejestracja:około 6 lat
  • Ostatnio:prawie 6 lat
  • Postów:9
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);
}
SZ
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 14 godzin
  • Postów:183
0
Kopiuj
"string . spacje . ".replace("  ", "")
UR
to raczej nie zadziała
K5
  • Rejestracja:około 6 lat
  • Ostatnio:około 5 godzin
  • Postów:1002
0

Użyj

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

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

UR
próbowałem w ten sposób ale StringBuilder w nagłówku metody mi przeszkadza a nie mogę modyfikować nagłówka
MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:14 minut
0
Kopiuj
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.
au7h
Wątek dotyczy Javy a nie C++ :)
MarekR22
ślepy jestem. Przepisałbym to na Java generis gdybym miął więcej wprawy z Java.
UR
doceniam pomoc, ale c++ mi się dzisiaj nie przyda :D
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 8 godzin
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4709
0

W zasadzie to prawie zrobiłeś:

Kopiuj
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")));
    }

jeden i pół terabajta powinno wystarczyć każdemu
edytowany 1x, ostatnio: jarekr000000
KE
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 3 lata
  • Postów:57
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

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

        return new StringBuilder(resultWithoutDoubleSpaces);
    }
Julian_
czemu var jak to na pewno String?
KE
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ć.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.