"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 StringBuilderklas heeft twee dozijn nuttige methoden. Dit zijn de belangrijkste:

Methode Beschrijving
StringBuilder append(obj)
Converteert het doorgegeven object naar een string en voegt deze toe aan de huidige string
StringBuilder insert(int index, obj)
Converteert het doorgegeven object naar een tekenreeks en voegt het in het midden van de huidige tekenreeks in
StringBuilder replace(int start, int end, String str)
Vervangt het deel van de tekenreeks dat wordt opgegeven door het start..end-interval door de doorgegeven tekenreeks
StringBuilder deleteCharAt(int index)
Verwijdert het teken met de opgegeven index uit de tekenreeks
StringBuilder delete(int start, int end)
Verwijdert tekens binnen het opgegeven interval uit de tekenreeks
int indexOf(String str, int index)
Zoekt naar een subtekenreeks in de huidige tekenreeks
int lastIndexOf(String str, int index)
Zoekt naar een subtekenreeks in de huidige tekenreeks, beginnend vanaf het einde
char charAt(int index)
Retourneert het teken in de tekenreeks bij de doorgegeven index
String substring(int start, int end)
Retourneert de subtekenreeks die is gedefinieerd door het opgegeven interval
StringBuilder reverse()
Keert de huidige tekenreeks om.
void setCharAt(int index, char)
Verandert het teken op de gespecificeerde index in het doorgegeven teken
int length()
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
StringBuilder builder = new StringBuilder("Hi");
builder.append("Bye");
builder.append(123);
Hi
HiBye
HiBye123

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
StringBuilder builder = new StringBuilder("Hi");
builder.append(123);
String result = builder.toString();
System.out.println(result);
Hi123

Hoe verwijder ik een personage?

"Om een ​​karakter in een veranderlijke string te verwijderen, moet je de methode gebruiken deleteCharAt(). Voorbeeld:

Code Uitgang
StringBuilder builder = new StringBuilder("Hello");
builder.deleteCharAt(2);
String result = builder.toString();
System.out.println(result);
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
StringBuilder builder = new StringBuilder("Mellow");
builder.replace(2, 5, "Hello!");
String result = builder.toString();
System.out.println(result);
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
String str = "Hello";
StringBuilder builder = new StringBuilder(str);
builder.reverse();
String result = builder.toString();
System.out.println(result);
olleH

"Naast de StringBuilderklasse heeft Java nog een stringachtige klasse genaamd StringBuffer. Het is een analoog van de StringBuilderklasse, maar de methoden zijn gemarkeerd met de synchronizedmodifier."

"Wat betekent dat?"

"Het betekent dat het StringBufferobject 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'.