"Hilsen, Amigo!"

"Hei, Rishi!"

"Du kan nå nok om strenger til å lære noe interessant. Mer spesifikt, en ny klasse som ligner på, men ikke akkurat det samme som, String-klassen."

"Høres spennende ut, selv om det ikke er helt klart for meg hvordan vanlige strenger kommer til kort og hvorfor andre strenglignende klasser trengs."

"La oss starte med det faktum at strenger er uforanderlige objekter i Java."

"Hvordan er det? Jeg glemte... Eller jeg visste aldri til å begynne med..."

"La meg minne deg på at uforanderlige objekter er de hvis tilstander ikke kan endres etter at de er opprettet."

"Ahhh... Hvorfor er strenger uforanderlige i Java?"

"Dette ble gjort for å gjøre String-klassen svært optimalisert og for å la den brukes overalt. For eksempel anbefales kun uforanderlige typer for bruk som nøkler i HashMap-samlingen .

"Men det oppstår ofte situasjoner når programmerere vil finne det mer praktisk for String-klassen å være mutbar. De vil ha en klasse som ikke lager en ny understreng hver gang en av metodene kalles."

"Men hva er det godt for?"

"Vel, anta at vi har en veldig stor streng og at vi ofte må legge til noe på slutten av den. I dette tilfellet ArrayList<Character>kan til og med en samling av tegn ( ) være mer effektiv enn å konstant gjenskape og sette sammen strengobjekter."

"Og det er derfor vi trenger strenger som ikke er helt i String-klassen?"

"Akkurat. Java-språket har lagt til en strenglignende type som kan endres. Den heter StringBuilder".

Opprette et objekt

"For å lage et StringBuilderobjekt basert på en eksisterende streng, må du utføre en setning som:

StringBuilder name = new StringBuilder(string);

"For å lage en tom mutbar streng, må du bruke en uttalelse som denne:

StringBuilder name = new StringBuilder();

Liste over metoder

" StringBuilderKlassen har to dusin nyttige metoder. Her er de viktigste:

Metode Beskrivelse
StringBuilder append(obj)
Konverterer det beståtte objektet til en streng og legger det til gjeldende streng
StringBuilder insert(int index, obj)
Konverterer det beståtte objektet til en streng og setter inn i midten av gjeldende streng
StringBuilder replace(int start, int end, String str)
Erstatter delen av strengen spesifisert av start..end-intervallet med den beståtte strengen
StringBuilder deleteCharAt(int index)
Fjerner tegnet med den angitte indeksen fra strengen
StringBuilder delete(int start, int end)
Fjerner tegn innenfor det angitte intervallet fra strengen
int indexOf(String str, int index)
Søker etter en understreng i gjeldende streng
int lastIndexOf(String str, int index)
Søker etter en understreng i gjeldende streng, med start fra slutten
char charAt(int index)
Returnerer tegnet i strengen ved den beståtte indeksen
String substring(int start, int end)
Returnerer delstrengen definert av det angitte intervallet
StringBuilder reverse()
Reverserer gjeldende streng.
void setCharAt(int index, char)
Endrer tegnet ved den angitte indeksen til det beståtte tegnet
int length()
Returnerer lengden på strengen i tegn

"Og nå vil jeg kort beskrive hver av disse metodene for deg.

Legger til en streng

"For å legge til noe i en foranderlig streng ( StringBuilder), bruk append()metoden. Eksempel:

Kode Beskrivelse
StringBuilder builder = new StringBuilder("Hi");
builder.append("Bye");
builder.append(123);
Hi
HiBye
HiBye123

Konvertering til en standardstreng

"For å konvertere et StringBuilderobjekt til et String-objekt, trenger du bare å kalle metoden toString(). Eksempel

Kode Produksjon
StringBuilder builder = new StringBuilder("Hi");
builder.append(123);
String result = builder.toString();
System.out.println(result);
Hi123

Hvordan sletter jeg et tegn?

"For å slette et tegn i en foranderlig streng, må du bruke deleteCharAt()metoden. Eksempel:

Kode Produksjon
StringBuilder builder = new StringBuilder("Hello");
builder.deleteCharAt(2);
String result = builder.toString();
System.out.println(result);
Helo

Hvordan erstatter jeg en del av en streng med en annen streng?

"For dette er det replace(int begin, int end, String str)metoden. Eksempel:

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

"Høres praktisk ut. Takk, Rishi."

"Ikke nevne det. Hva med dette, kan du snu en streng bakover? Hvordan ville du gjort det?"

"Vel... jeg ville laget en StringBuilder, satt en streng i den... Deretter opprettet en ny streng, og i en løkke fra det siste tegnet til det første... Eller kanskje et bitvis skifte...

"Ikke dårlig. Men det kan være raskere. Det er en spesiell metode for å gjøre dette - reverse();Eksempel:

Kode Produksjon
String str = "Hello";
StringBuilder builder = new StringBuilder(str);
builder.reverse();
String result = builder.toString();
System.out.println(result);
olleH

"Foruten StringBuilderklassen har Java en annen strenglignende klasse kalt StringBuffer. Det er en analog av StringBuilderklassen, men metodene er merket med synchronizedmodifikatoren."

"Hva betyr det?"

"Det betyr at StringBufferobjektet kan nås samtidig fra flere tråder."

"Jeg er ikke så godt kjent med tråder ennå. Men 'kan nås fra flere tråder' er klart bedre enn 'kan ikke få tilgang fra flere tråder'... Hvorfor ikke alltid bruke StringBufferda?"

"Fordi det er mye tregere enn StringBuilder. Du kan trenge en slik klasse når du begynner å aktivt utforske multithreading i Java Multithreading- oppdraget.

"Jeg skal skrive det til minnet mitt for ikke å glemme. Merket "for fremtiden".