"Witaj, Amigo!"
"Cześć Rysiu!"
„Teraz wiesz już wystarczająco dużo o ciągach znaków, aby dowiedzieć się czegoś interesującego. Dokładniej, nowej klasy, która jest podobna do klasy String, ale nie do końca taka sama”.
„Brzmi intrygująco, chociaż nie jest dla mnie do końca jasne, dlaczego zwykłe struny zawodzą i dlaczego potrzebne są inne klasy podobne do strun”.
„Zacznijmy od tego, że łańcuchy znaków są niezmiennymi obiektami w Javie”.
„Jak to? Zapomniałem… Albo nigdy nie wiedziałem, od czego zacząć…”
„Przypomnę, że obiekty niezmienne to te, których stanu nie można zmienić po utworzeniu”.
„Ahhh… Dlaczego ciągi znaków są niezmienne w Javie?”
„Zrobiono to, aby klasa String była wysoce zoptymalizowana i aby można było jej używać wszędzie. Na przykład jako klucze w kolekcji HashMap zaleca się stosowanie tylko niezmiennych typów .
„Jednak często pojawiają się sytuacje, w których programiści uznaliby, że wygodniej jest, aby klasa String była zmienna. Chcą klasy, która nie tworzy nowego podłańcucha za każdym razem, gdy wywoływana jest jedna z jej metod”.
— Ale do czego to służy?
„Cóż, załóżmy, że mamy bardzo duży ciąg znaków i musimy często dodawać coś na jego końcu. W takim przypadku nawet zbiór znaków ( ArrayList<Character>
) może być bardziej wydajny niż ciągłe odtwarzanie i łączenie obiektów typu String”.
„I dlatego potrzebujemy łańcuchów, które nie są klasą String?”
„Dokładnie. Język Java dodał typ podobny do łańcucha, który można zmienić. Nazywa się on StringBuilder
„.
Tworzenie obiektu
„Aby utworzyć StringBuilder
obiekt na podstawie istniejącego ciągu, musisz wykonać instrukcję taką jak:
StringBuilder name = new StringBuilder(string);
„Aby utworzyć pusty zmienny ciąg znaków, musisz użyć następującej instrukcji:
StringBuilder name = new StringBuilder();
Lista metod
„ StringBuilder
Klasa ma dwa tuziny pomocnych metod. Oto najważniejsze z nich:
metoda | Opis |
---|---|
|
Konwertuje przekazany obiekt na ciąg i dołącza go do bieżącego ciągu |
|
Konwertuje przekazany obiekt na ciąg i wstawia w środku bieżącego ciągu |
|
Zamienia część ciągu określoną przez interwał początkowy..końcowy na przekazany ciąg |
|
Usuwa znak o określonym indeksie z ciągu |
|
Usuwa znaki w określonym przedziale z ciągu |
|
Wyszukuje podłańcuch w bieżącym ciągu |
|
Wyszukuje podłańcuch w bieżącym ciągu, zaczynając od końca |
|
Zwraca znak w łańcuchu w przekazanym indeksie |
|
Zwraca podłańcuch zdefiniowany przez określony interwał |
|
Odwraca bieżący ciąg. |
|
Zmienia znak o określonym indeksie na przekazany znak |
|
Zwraca długość ciągu w znakach |
„A teraz pokrótce opiszę wam każdą z tych metod.
Dołączanie do ciągu
„Aby dodać coś do zmiennego ciągu znaków ( StringBuilder
), użyj append()
metody. Przykład:
Kod | Opis |
---|---|
|
Hi |
Konwersja na standardowy ciąg
„Aby przekonwertować StringBuilder
obiekt na obiekt typu String, wystarczy wywołać jego toString()
metodę. Przykład
Kod | Wyjście |
---|---|
|
Hi123 |
Jak usunąć postać?
„Aby usunąć znak w zmiennym łańcuchu, musisz użyć deleteCharAt()
metody. Przykład:
Kod | Wyjście |
---|---|
|
Helo |
Jak zamienić część ciągu na inny ciąg?
„Na to jest replace(int begin, int end, String str)
metoda. Przykład:
Kod | Wyjście |
---|---|
|
MeHello |
„Brzmi wygodnie. Dziękuję, Rishi”.
„Nie wspominaj o tym. A może odwrócisz sznurek? Jak byś to zrobił?”
„Cóż… stworzyłbym StringBuilder
, umieściłbym w nim ciąg znaków… Następnie utworzyłbym nowy ciąg znaków iw pętli od ostatniego znaku do pierwszego… A może przesunięcie bitowe…
„Nieźle. Ale mogłoby być szybciej. Jest na to specjalna metoda — reverse();
przykład:
Kod | Wyjście |
---|---|
|
olleH |
„Oprócz StringBuilder
klasy Java ma inną klasę podobną do łańcucha o nazwie StringBuffer
. Jest to odpowiednik StringBuilder
klasy, ale jej metody są oznaczone modyfikatorem synchronized
”.
"Co to znaczy?"
„Oznacza to, że StringBuffer
dostęp do obiektu można uzyskać jednocześnie z wielu wątków”.
„Nie jestem jeszcze zaznajomiony z wątkami. Ale „można uzyskać dostęp z wielu wątków” jest wyraźnie lepsze niż „nie można uzyskać dostępu z wielu wątków”… Dlaczego więc nie zawsze używać? StringBuffer
”
„Ponieważ jest znacznie wolniejszy niż StringBuilder
. Możesz potrzebować takiej klasy, gdy zaczniesz aktywnie eksplorować wielowątkowość w zadaniu Java Multithreading .
— Zapiszę to sobie w pamięci, żeby nie zapomnieć. Z dopiskiem „na przyszłość”.
GO TO FULL VERSION