– Ü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 |
|---|---|
|
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 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.
GO TO FULL VERSION