"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 StringBuilder
objekt 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
" StringBuilder
Klassen har to dusin nyttige metoder. Her er de viktigste:
Metode | Beskrivelse |
---|---|
|
Konverterer det beståtte objektet til en streng og legger det til gjeldende streng |
|
Konverterer det beståtte objektet til en streng og setter inn i midten av gjeldende streng |
|
Erstatter delen av strengen spesifisert av start..end-intervallet med den beståtte strengen |
|
Fjerner tegnet med den angitte indeksen fra strengen |
|
Fjerner tegn innenfor det angitte intervallet fra strengen |
|
Søker etter en understreng i gjeldende streng |
|
Søker etter en understreng i gjeldende streng, med start fra slutten |
|
Returnerer tegnet i strengen ved den beståtte indeksen |
|
Returnerer delstrengen definert av det angitte intervallet |
|
Reverserer gjeldende streng. |
|
Endrer tegnet ved den angitte indeksen til det beståtte tegnet |
|
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 |
---|---|
|
Hi |
Konvertering til en standardstreng
"For å konvertere et StringBuilder
objekt til et String-objekt, trenger du bare å kalle metoden toString()
. Eksempel
Kode | Produksjon |
---|---|
|
Hi123 |
Hvordan sletter jeg et tegn?
"For å slette et tegn i en foranderlig streng, må du bruke deleteCharAt()
metoden. Eksempel:
Kode | Produksjon |
---|---|
|
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 |
---|---|
|
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 |
---|---|
|
olleH |
"Foruten StringBuilder
klassen har Java en annen strenglignende klasse kalt StringBuffer
. Det er en analog av StringBuilder
klassen, men metodene er merket med synchronized
modifikatoren."
"Hva betyr det?"
"Det betyr at StringBuffer
objektet 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 StringBuffer
da?"
"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".
GO TO FULL VERSION