"Hilsen, Amigo!"
"Hej, Rishi!"
"Du ved nu nok om strenge til at lære noget interessant. Mere specifikt, en ny klasse, der ligner, men ikke helt det samme som, String-klassen."
"Lyder spændende, selvom det ikke er helt klart for mig, hvordan almindelige strenge kommer til kort, og hvorfor andre strenge-lignende klasser er nødvendige."
"Lad os starte med det faktum, at strenge er uforanderlige objekter i Java."
"Hvordan er det? Jeg glemte... Eller jeg vidste aldrig til at begynde med..."
"Lad mig minde dig om, at uforanderlige objekter er dem, hvis tilstande ikke kan ændres, efter de er oprettet."
"Ahhh... Hvorfor er strenge uforanderlige i Java?"
"Dette blev gjort for at gøre String-klassen meget optimeret og for at den kan bruges overalt. For eksempel anbefales kun uforanderlige typer til brug som nøgler i HashMap-samlingen .
"Men der opstår ofte situationer, hvor programmører ville finde det mere bekvemt for String-klassen at kunne ændres. De vil have en klasse, der ikke opretter en ny understreng, hver gang en af dens metoder kaldes."
"Men hvad er det godt for?"
"Tja, antag, at vi har en meget stor streng, og at vi ofte skal tilføje noget til slutningen af den. I dette tilfælde ArrayList<Character>
kan selv en samling af tegn ( ) være mere effektiv end konstant at genskabe og sammenkæde String-objekter."
"Og det er derfor, vi har brug for strenge, der ikke helt er String-klassen?"
"Nøjagtigt. Java-sproget har tilføjet en String-lignende type, der kan ændres. Den hedder StringBuilder
".
Oprettelse af et objekt
"For at oprette et StringBuilder
objekt baseret på en eksisterende streng, skal du udføre en sætning som:
StringBuilder name = new StringBuilder(string);
"For at oprette en tom foranderlig streng, skal du bruge en sætning som denne:
StringBuilder name = new StringBuilder();
Liste over metoder
" StringBuilder
Klassen har to dusin nyttige metoder. Her er de vigtigste:
Metode | Beskrivelse |
---|---|
|
Konverterer det beståede objekt til en streng og føjer det til den aktuelle streng |
|
Konverterer det beståede objekt til en streng og indsætter i midten af den aktuelle streng |
|
Erstatter den del af strengen, der er angivet af start..end-intervallet, med den beståede streng |
|
Fjerner tegnet med det angivne indeks fra strengen |
|
Fjerner tegn inden for det angivne interval fra strengen |
|
Søger efter en understreng i den aktuelle streng |
|
Søger efter en understreng i den aktuelle streng, startende fra slutningen |
|
Returnerer tegnet i strengen ved det beståede indeks |
|
Returnerer understrengen defineret af det angivne interval |
|
Vender den aktuelle streng. |
|
Ændrer tegnet ved det angivne indeks til det beståede tegn |
|
Returnerer længden af strengen i tegn |
"Og nu vil jeg kort beskrive hver af disse metoder for dig.
Tilføjelse til en streng
"For at tilføje noget til en foranderlig streng ( StringBuilder
), skal du bruge append()
metoden. Eksempel:
Kode | Beskrivelse |
---|---|
|
Hi |
Konvertering til en standardstreng
"For at konvertere et StringBuilder
objekt til et String-objekt skal du blot kalde dets toString()
metode. Eksempel
Kode | Produktion |
---|---|
|
Hi123 |
Hvordan sletter jeg et tegn?
"For at slette et tegn i en foranderlig streng, skal du bruge deleteCharAt()
metoden. Eksempel:
Kode | Produktion |
---|---|
|
Helo |
Hvordan erstatter jeg en del af en streng med en anden streng?
"Til dette er der replace(int begin, int end, String str)
metoden. Eksempel:
Kode | Produktion |
---|---|
|
MeHello!w |
"Lyder praktisk. Tak, Rishi."
"Nævn det ikke. Hvad med det her, kan du vende en snor bagud? Hvordan ville du gøre det?"
"Jamen... jeg ville lave en StringBuilder
, sætte en streng i den... Så lave en ny streng, og i en løkke fra det sidste tegn til det første... Eller måske et bitvis skift...
"Ikke dårligt. Men det kunne være hurtigere. Der er en speciel metode til at gøre dette - reverse();
Eksempel:
Kode | Produktion |
---|---|
|
olleH |
"Udover StringBuilder
klassen har Java en anden strenglignende klasse kaldet StringBuffer
. Det er en analog af StringBuilder
klassen, men dens metoder er markeret med synchronized
modifikatoren."
"Hvad betyder det?"
"Det betyder, at StringBuffer
objektet kan tilgås samtidigt fra flere tråde."
"Jeg er ikke særlig fortrolig med tråde endnu. Men 'kan tilgås fra flere tråde' er klart bedre end 'kan ikke tilgås fra flere tråde'... Hvorfor så ikke altid bruge? StringBuffer
"
"Fordi det er meget langsommere end StringBuilder
. Du kan have brug for sådan en klasse, når du begynder at aktivt udforske multithreading i Java Multithreading- questen.
"Det vil jeg skrive til min hukommelse for ikke at glemme. Mærket 'for fremtiden'.
GO TO FULL VERSION