– Üdvözlöm, Amigo!

– Szia, Rishi!

"Most már eleget tudsz a húrokról ahhoz, hogy valami érdekeset tanulj. Pontosabban egy új osztályt, amely hasonló, de nem teljesen ugyanaz, mint a String osztály."

"Érdekesnek hangzik, bár számomra nem teljesen világos, hogy a közönséges húrok hogyan esnek alulmúláshoz, és miért van szükség más húrszerű osztályokra."

"Kezdjük azzal, hogy a karakterláncok megváltoztathatatlan objektumok a Java-ban."

"Hogy van ez? Elfelejtettem... Vagy nem tudtam, hogy kezdjek vele..."

"Hadd emlékeztesselek arra, hogy a megváltoztathatatlan objektumok azok, amelyek állapotát a létrehozásuk után nem lehet megváltoztatni."

"Ahhh... Miért változtathatatlanok a karakterláncok a Java nyelven?"

"Ezt azért tették, hogy a String osztályt rendkívül optimalizálttá tegyük, és lehetővé tegyék mindenhol a használatát. Például a HashMap gyűjteményben csak a változtathatatlan típusokat javasoljuk kulcsként használni .

"Azonban gyakran előfordulnak olyan helyzetek, amikor a programozók kényelmesebbnek találják, ha a String osztály változtatható. Olyan osztályt akarnak, amely nem hoz létre minden egyes metódus meghívásakor új részkarakterláncot."

– De mire jó?

"Nos, tegyük fel, hogy nagyon nagy karakterláncunk van, és gyakran hozzá kell adnunk valamit a végéhez. Ebben az esetben még a karakterek gyűjteménye ( ArrayList<Character>) is hatékonyabb lehet, mint a String objektumok folyamatos újraalkotása és összefűzése."

– És ezért van szükségünk olyan húrokra, amelyek nem egészen a String osztályba tartoznak?

"Pontosan. A Java nyelv hozzáadott egy karakterlánc-szerű típust, amely megváltoztatható. StringBuilder"-nek hívják.

Objektum létrehozása

"Objektum létrehozásához StringBuilderegy meglévő karakterlánc alapján, egy ilyen utasítást kell végrehajtania:

StringBuilder name = new StringBuilder(string);

"Üres változtatható karakterlánc létrehozásához egy ehhez hasonló utasítást kell használnia:

StringBuilder name = new StringBuilder();

A módszerek listája

"Az StringBuilderosztálynak két tucat hasznos módszere van. Íme a legfontosabbak:

Módszer Leírás
StringBuilder append(obj)
Az átadott objektumot karakterláncsá alakítja, és hozzáfűzi az aktuális karakterlánchoz
StringBuilder insert(int index, obj)
Az átadott objektumot karakterláncsá alakítja, és beszúrja az aktuális karakterlánc közepére
StringBuilder replace(int start, int end, String str)
Lecseréli a karakterlánc kezdő..vége intervallum által megadott részét az átadott karakterláncra
StringBuilder deleteCharAt(int index)
Eltávolítja a karakterláncból a megadott indexű karaktert
StringBuilder delete(int start, int end)
Eltávolítja a karakterláncból a megadott intervallumon belüli karaktereket
int indexOf(String str, int index)
Alkarakterláncot keres az aktuális karakterláncban
int lastIndexOf(String str, int index)
Egy részkarakterláncot keres az aktuális karakterláncban, a végétől kezdve
char charAt(int index)
Az átadott indexnél lévő karakterlánc karakterét adja vissza
String substring(int start, int end)
A megadott intervallum által meghatározott részkarakterláncot adja vissza
StringBuilder reverse()
Megfordítja az aktuális karakterláncot.
void setCharAt(int index, char)
A megadott indexben lévő karaktert átadott karakterre változtatja
int length()
A karakterlánc hosszát adja vissza karakterben

"És most röviden leírom Önnek ezeket a módszereket.

Hozzáfűzés egy karakterlánchoz

"Ha hozzá szeretne adni valamit egy változó karakterlánchoz ( StringBuilder), használja a append()módszert. Példa:

Kód Leírás
StringBuilder builder = new StringBuilder("Hi");
builder.append("Bye");
builder.append(123);
Hi
HiBye
HiBye123

Konvertálás szabványos karakterláncra

StringBuilder"Ha egy objektumot String objektummá szeretne konvertálni , csak meg kell hívnia toString()a metódusát. Példa

Kód Kimenet
StringBuilder builder = new StringBuilder("Hi");
builder.append(123);
String result = builder.toString();
System.out.println(result);
Hi123

Hogyan törölhetek egy karaktert?

"Ha törölni szeretne egy karaktert egy változtatható karakterláncban, a módszert kell használnia deleteCharAt(). Példa:

Kód Kimenet
StringBuilder builder = new StringBuilder("Hello");
builder.deleteCharAt(2);
String result = builder.toString();
System.out.println(result);
Helo

Hogyan cserélhetem ki egy karakterlánc egy részét egy másik karakterláncra?

"Erre ott a replace(int begin, int end, String str)módszer. Példa:

Kód Kimenet
StringBuilder builder = new StringBuilder("Mellow");
builder.replace(2, 5, "Hello!");
String result = builder.toString();
System.out.println(result);
MeHello!w

"Kényelmesen hangzik. Köszönöm, Rishi."

"Ne említsd. Mit szólnál ehhez, vissza tudsz fordítani egy húrt? Hogyan csinálnád?"

"Hát... létrehoznék egy StringBuilder, beleraknék egy karakterláncot... Aztán létrehoznék egy új karakterláncot, és ciklusban az utolsó karaktertől az elsőig... Vagy esetleg bitenkénti eltolás...

"Nem rossz. De lehetne gyorsabb is. Van erre egy speciális módszer – reverse();Példa:

Kód Kimenet
String str = "Hello";
StringBuilder builder = new StringBuilder(str);
builder.reverse();
String result = builder.toString();
System.out.println(result);
olleH

"Az StringBuilderosztályon kívül a Java-nak van egy másik string-szerű osztálya is StringBuffer. Ez az osztály analógja StringBuilder, de a metódusai a synchronizedmódosítóval vannak megjelölve."

"Az mit jelent?"

"Ez azt jelenti, hogy az StringBufferobjektum egyszerre több szálból is elérhető."

"Még nem nagyon ismerem a szálakat. De a "több szálból elérhető" egyértelműen jobb, mint a "több szálból nem érhető el"... Miért ne használná akkor mindig? StringBuffer"

"Mert sokkal lassabb, mint StringBuildera . Szüksége lehet egy ilyen osztályra, amikor elkezdi aktívan felfedezni a többszálú Java Multithreading küldetést.

"Ezt az emlékezetembe fogom írni, hogy ne felejtsem el. A "jövőnek" jelzéssel.