Pora poruszyć temat klasy "StringBuilder", która w języku Java pozwala na modyfikowanie łańcuchów znaków w sposób rzekłbym...legalny ✅. Co złego w tradycyjnym przypisywaniu nowego łańcucha do tej samej zmiennej 🤔? Zaraz się dowiesz dlaczego. Usiądź, weź sobie coś pysznego i poczytaj - wszystko stanie się jasne (przynajmniej mam nadzieję 😆) 😉!
"STRINGBUILDER" W JĘZYKU JAVA ZROBI TO SAMO, TYLKO BEZPIECZNIEJ!
Żeby zrozumieć dlaczego temat jest ważny, muszę zrobić krótki wywód o prawdziwej "twarzy" typu danych jakim jest "String". Łańcuchowy typ danych oczywiście można modyfikować poprzez przypisanie nowego i w tym języku jest to bezkarne posunięcie:
String text = "Mój łańcuch znaków";
text = "Mój nowy łańcuch znaków";
Czy masz świadomość, że to może kaleczyć pamięć komputera 😯? W dużym skrócie chodzi o następującą rzecz: możesz wierzyć lub nie, natomiast w rzeczywistości łańcuch znaków jest typem niemodyfikowalnym (ang. immutable). Za każdym razem przypisując do tej samej (już zainicjowanej) zmiennej nowy łańcuch znaków (bądź stosując konkatenację), tamta wartość zostaje tylko "porzucona", lecz nadal istnieje na stercie (struktura danych "utrzymująca łączność" z obiektami poprzez wskaźniki) przez co marnuje się pamięć 😳!
Dalsze szczegóły tej dramatycznej prawdy są przedstawione w osobnym artykule. A teraz poznaj klasę, która uchroni Cię przed marnotrawstwem 👍!
"StringBuilder" w języku Java to klasa przechowująca specjalny bufor dla łańcucha znaków, który naturalnie jest "elastyczny" i dostosowuje się do podanego łańcucha. Mając wiedzę na temat konkretnych jej metod, możesz bez komplikacji edytować łańcuch na tej samej zmiennej bez obaw o rosnące zużycie pamięci.
KOD POPROSZĘ!
Proszę uprzejmie 😁. Konstruktor wygląda tak 👇:
StringBuilder stringBuilder = new StringBuilder("Mój łańcuch znaków");
Mając ten obiekt do dyspozycji, możemy sobie wywołać metodę, która zmodyfikuje łańcuch w sposób bezpieczny. Na przykład "insert":
stringBuilder.insert(4, "nowy ");
która, oczekując parametru liczbowego (od którego indeksu) i łańcuchowego, "dopisze" go wewnątrz istniejącego łańcucha. Jeżeli nie potrzebujesz ustalania w którym miejscu dopisać nowy łańcuch i wystarczy Ci na końcu, sięgnij po "append":
stringBuilder.append(" z dopiskiem na końcu");
Język Java lubi zaskakiwać, a to kolejna "z niespodzianek" – nie ma metody wprost, która czyści łańcuch znaków 🤭! Musisz użyć jednej z dwóch poniższych:
stringBuilder.setLength(0);
stringBuilder.delete(0, stringBuilder.length());
Jest wiele innych metod, takich jak wydobywanie znaku na podanym indeksie ("charAt"):
stringBuilder.charAt(0);
"odwracanie" łańcucha ("reverse"):
stringBuilder.reverse();
zwracanie aktualnej długości łańcucha ("length"):
stringBuilder.length();
czy ustalanie aktualnie maksymalnego rozmiaru łańcucha ("capacity"):
stringBuilder.capacity();
Więcej metod jest opisanych w dokumentacji, więc tam odsyłam 😊.
"StringBuilder" przechowuje łańcuch znaków w elastycznym buforze, w którym można bezpiecznie modyfikować łańcuch zapobiegając utracie pamięci.
Styknie. "StringBuilder" w języku Java zalecam stosować już od zaraz! Także przypisywanie i konkatenacje uważamy za "ble" 😊, a wszelkie tego typu operacje robimy przez tę klasę 😄!