Metoda string zwracająca string

Metoda string zwracająca string
UR
  • Rejestracja:około 6 lat
  • Ostatnio:prawie 6 lat
  • Postów:9
0

Napisałem taką oto metodę:

Kopiuj
public static String censorByRemoving(String tekst, String innytekst) {
        String result = "";
        for (int i = 0; i < tekst.length(); i++) {
            result = tekst.replace(innytekst, "");
        }
        return result;
    }

W testach podaje łańcuch "Ala ma kota", a drugi "ma". Metoda powinna zwrócić z pojedynczą spacją pomiędzy wyrazami "Ala kota", a zwraca "Ala kota" z podwójną spacją. Nie mogę się pozbyć jednej spacji między tymi dwoma wyrazami. Nie wiem jak to zrobić i niestety nie mogę modyfikować nagłówka metody. Może ktoś wie jak rozwiązać ten problem?

edytowany 3x, ostatnio: ŁF
BI
Metoda powinna zwrócić "Ala kota", a zwraca "Ala kota", o co chodzi?
UR
Pomiędzy wyrazem "Ala", a wyrazem "kota" występują dwie spacje, a powinna być jedna.
BI
No to po prostu przekaż argument "ma "(ze spacją na końcu albo początku) i tyle.
UR
Gdybym tak mógł to nie tworzyłbym wątku. Mam narzucone te dwa łańcuchy i nie mogę sobie dodawać spacji na początku albo na końcu.
BI
To warto pisać takie rzeczy w treści :). No to np. napisz zamianę dwóch spacji na jedną pod zamianą "ma" na pusty ciąg
AK
Popracuj również nad stawianiem pytań. Nie masz problemu ze zwracaniem stringu, masz problem z zastępowaniem jego fragmentów
UR
Następnym razem postaram się żeby lepiej to wyglądało
AK
wątek o zastępowaniu dwóch spacji już miałeś
PA
PA
  • Rejestracja:ponad 6 lat
  • Ostatnio:prawie 3 lata
  • Postów:288
1

Żeby nie mieć spacji na początku ani na końcu użyj funkcji Trim.
A tak to sprawdzaj czy są 2 spacje koło siebie i wtedy jedną usuwaj.

Na Janusza mógłbyś zrobić tak:

Kopiuj
public static String censorByRemoving(String tekst, String innytekst)
        {
            String result = "";
            for (int i = 0; i < tekst.length(); i++)
            {
                result = tekst.replace(innytekst, "");

            }
            for (int i = 0; i < result.length(); i++)
            {
                result = result.replace("  ", " ");
            }
            return result;
        }
edytowany 1x, ostatnio: pavarotti
EN
  • Rejestracja:około 6 lat
  • Ostatnio:prawie 3 lata
  • Postów:2
1

Nie wiem jak bardzo ma byc to odporne na input, ale zakladam, ze zadajac takie pytanie dopiero zaczynasz swoja przygode z kodowaniem.
Najprostsze, ale najmniej odporne rozwiazanie to po prostu do innytekst (btw. uzywaj prosze angielskich nazw zmiennych :) ) dodaj spacje.

Kopiuj
innytekst.concat(" ")
// lub jezeli wolisz
innytekst+" "

Ja jednak bym sprawdzil wyrazeniem regularnym czy w wyniku koncowym znajduja sie pod rzad wiecej niz jedna spacja i zwyczajnie zamienil je na jedna.

Kopiuj
result.replaceAll(" +", " ");
//dla lepszego wyniku warto usunac jeszcze wszelkie whitespace'y z przodu i z tylu
result.trim();

Ta opcja jest bardziej odporna na dziwny input.

JW
  • Rejestracja:około 6 lat
  • Ostatnio:prawie 6 lat
  • Lokalizacja:Wroclaw
  • Postów:12
0

Możesz to ugryźć tak:

Kopiuj
  public static String censorByRemoving(String text, String otherText) {
        // usunięcie wszystkich wystąpień tekstu 'otherText'
        text = text.replaceAll(otherText, "");

        while(text.contains("  ")){
            // usunięcie podwójnych spacji
            text = text.replaceAll("  "," ");
        }

        // obcięcie spacji z początku i końca
        return text.trim();
    }

Interaktywny przykład: https://programuj.pl/snippet/b49cbbdc-3543-4711-9cc2-fe95ab2dd946


damianem
  • Rejestracja:prawie 8 lat
  • Ostatnio:4 miesiące
  • Postów:205
0

Chciałem zobaczyć czy da się zrobić dla tego one-linera z użyciem regexów i wyszedł mi taki potworek, wrzucam w ramach ciekawostki:

Kopiuj
    public static void main(String[] args) {
	    assert "Ala kota".equals(replaceAndNormalize("Ala ma kota", "ma"));
	    assert "Ala kota".equals(replaceAndNormalize("Alama kota", "ma"));
	    assert "Ala kota".equals(replaceAndNormalize("Alama  kota", "ma"));
	    assert "Ala kota".equals(replaceAndNormalize("Ala makota", "ma"));
	    assert "Ala kota".equals(replaceAndNormalize("Ala  makota", "ma"));
	    assert "Ala kota".equals(replaceAndNormalize("Ala   ma   kota", "ma"));
	    assert "Ala kota".equals(replaceAndNormalize("Ala   ma   kota", "  ma  "));
	    assert "Alakota".equals(replaceAndNormalize("Alamakota", "ma"));
	    assert "kota".equals(replaceAndNormalize("makota", "ma"));
	    assert "".equals(replaceAndNormalize("ma", "ma"));
	    assert "()| []".equals(replaceAndNormalize("()| .+ []", ".+"));
    }

    private static String replaceAndNormalize(String input, String token) {
        return input.replaceAll("((\\s)+\\Q" + token + "\\E(\\s)+)|(\\Q" + token + "\\E(\\s)+)|((\\s)+\\Q" + token + "\\E)|(\\Q" + token + "\\E)", "$2$5$7");
    }
edytowany 1x, ostatnio: damianem

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.