– Ü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 StringBuilder
egy 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 StringBuilder
osztálynak két tucat hasznos módszere van. Íme a legfontosabbak:
Módszer | Leírás |
---|---|
|
Az átadott objektumot karakterláncsá alakítja, és hozzáfűzi az aktuális karakterlánchoz |
|
Az átadott objektumot karakterláncsá alakítja, és beszúrja az aktuális karakterlánc közepére |
|
Lecseréli a karakterlánc kezdő..vége intervallum által megadott részét az átadott karakterláncra |
|
Eltávolítja a karakterláncból a megadott indexű karaktert |
|
Eltávolítja a karakterláncból a megadott intervallumon belüli karaktereket |
|
Alkarakterláncot keres az aktuális karakterláncban |
|
Egy részkarakterláncot keres az aktuális karakterláncban, a végétől kezdve |
|
Az átadott indexnél lévő karakterlánc karakterét adja vissza |
|
A megadott intervallum által meghatározott részkarakterláncot adja vissza |
|
Megfordítja az aktuális karakterláncot. |
|
A megadott indexben lévő karaktert átadott karakterre változtatja |
|
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 |
---|---|
|
Hi |
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 |
---|---|
|
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 |
---|---|
|
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 |
---|---|
|
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 |
---|---|
|
olleH |
"Az StringBuilder
osztá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 synchronized
módosítóval vannak megjelölve."
"Az mit jelent?"
"Ez azt jelenti, hogy az StringBuffer
objektum 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 StringBuilder
a . 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.
GO TO FULL VERSION