"Gegroet, Amigo!"
"Hallo Rishi!"
"Je weet nu genoeg over strings om iets interessants te leren. Meer specifiek, een nieuwe klasse die lijkt op, maar niet precies hetzelfde is als, de String-klasse."
"Klinkt intrigerend, hoewel het me niet helemaal duidelijk is hoe gewone snaren te kort schieten en waarom andere snaarachtige klassen nodig zijn."
"Laten we beginnen met het feit dat strings onveranderlijke objecten zijn in Java."
"Hoe komt dat? Ik vergat... Of ik wist niet om te beginnen met..."
"Laat me je eraan herinneren dat onveranderlijke objecten objecten zijn waarvan de status niet kan worden gewijzigd nadat ze zijn gemaakt."
"Ahhh... Waarom zijn strings onveranderlijk in Java?"
"Dit is gedaan om de String-klasse sterk geoptimaliseerd te maken en ervoor te zorgen dat deze overal kan worden gebruikt. Alleen onveranderlijke typen worden bijvoorbeeld aanbevolen voor gebruik als sleutels in de HashMap-verzameling .
"Er doen zich echter vaak situaties voor waarin programmeurs het handiger vinden als de String-klasse veranderlijk is. Ze willen een klasse die niet elke keer dat een van zijn methoden wordt aangeroepen een nieuwe substring maakt."
"Maar waar is het goed voor?"
"Nou, stel dat we een heel grote string hebben en we moeten er regelmatig iets aan toevoegen. In dit geval ArrayList<Character>
kan zelfs een verzameling tekens ( ) efficiënter zijn dan het constant opnieuw maken en samenvoegen van String-objecten."
"En daarom hebben we strings nodig die niet helemaal de klasse String zijn?"
"Precies. De Java-taal heeft een String-achtig type toegevoegd dat kan worden gewijzigd. Het heet StringBuilder
".
Een voorwerp maken
"Om een StringBuilder
object te maken op basis van een bestaande string, moet je een statement uitvoeren zoals:
StringBuilder name = new StringBuilder(string);
"Om een lege veranderlijke string te maken, moet je een statement als dit gebruiken:
StringBuilder name = new StringBuilder();
Lijst met methoden
"De StringBuilder
klas heeft twee dozijn nuttige methoden. Dit zijn de belangrijkste:
Methode | Beschrijving |
---|---|
|
Converteert het doorgegeven object naar een string en voegt deze toe aan de huidige string |
|
Converteert het doorgegeven object naar een tekenreeks en voegt het in het midden van de huidige tekenreeks in |
|
Vervangt het deel van de tekenreeks dat wordt opgegeven door het start..end-interval door de doorgegeven tekenreeks |
|
Verwijdert het teken met de opgegeven index uit de tekenreeks |
|
Verwijdert tekens binnen het opgegeven interval uit de tekenreeks |
|
Zoekt naar een subtekenreeks in de huidige tekenreeks |
|
Zoekt naar een subtekenreeks in de huidige tekenreeks, beginnend vanaf het einde |
|
Retourneert het teken in de tekenreeks bij de doorgegeven index |
|
Retourneert de subtekenreeks die is gedefinieerd door het opgegeven interval |
|
Keert de huidige tekenreeks om. |
|
Verandert het teken op de gespecificeerde index in het doorgegeven teken |
|
Retourneert de lengte van de tekenreeks in tekens |
"En nu zal ik u elk van deze methoden kort beschrijven.
Toevoegen aan een string
"Gebruik de methode om iets toe te voegen aan een veranderlijke string ( StringBuilder
) append()
. Voorbeeld:
Code | Beschrijving |
---|---|
|
Hi |
Converteren naar een standaard string
"Om een StringBuilder
object naar een String-object te converteren, hoef je alleen maar zijn toString()
methode aan te roepen. Voorbeeld
Code | Uitgang |
---|---|
|
Hi123 |
Hoe verwijder ik een personage?
"Om een karakter in een veranderlijke string te verwijderen, moet je de methode gebruiken deleteCharAt()
. Voorbeeld:
Code | Uitgang |
---|---|
|
Helo |
Hoe vervang ik een deel van een string door een andere string?
"Hiervoor is er de replace(int begin, int end, String str)
methode. Voorbeeld:
Code | Uitgang |
---|---|
|
MeHello!w |
"Klinkt handig. Dank je wel, Rishi."
"Noem het niet. Wat dacht je hiervan, kun je een snaar achteruit draaien? Hoe zou je dat doen?"
"Nou... ik zou een maken StringBuilder
, er een string in stoppen... Maak dan een nieuwe string, en in een lus van het laatste teken naar het eerste... Of misschien een bitsgewijze verschuiving...
"Niet slecht. Maar het kan sneller. Er is een speciale methode om dit te doen — reverse();
Voorbeeld:
Code | Uitgang |
---|---|
|
olleH |
"Naast de StringBuilder
klasse heeft Java nog een stringachtige klasse genaamd StringBuffer
. Het is een analoog van de StringBuilder
klasse, maar de methoden zijn gemarkeerd met de synchronized
modifier."
"Wat betekent dat?"
"Het betekent dat het StringBuffer
object tegelijkertijd toegankelijk is vanuit meerdere threads."
"Ik ben nog niet erg bekend met threads. Maar 'kan benaderd worden vanuit meerdere threads' is duidelijk beter dan 'kan niet benaderd worden vanuit meerdere threads'... Waarom dan niet altijd gebruiken? StringBuffer
"
"Omdat het veel langzamer is dan StringBuilder
. Misschien heb je zo'n klasse nodig als je multithreading actief gaat verkennen in de Java Multithreading- zoektocht.
"Ik zal dat in mijn geheugen schrijven om het niet te vergeten. Gemarkeerd met 'voor de toekomst'.
GO TO FULL VERSION