"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 StringBuilderobjekt 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

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

Metode Beskrivelse
StringBuilder append(obj)
Konverterer det beståede objekt til en streng og føjer det til den aktuelle streng
StringBuilder insert(int index, obj)
Konverterer det beståede objekt til en streng og indsætter i midten af ​​den aktuelle streng
StringBuilder replace(int start, int end, String str)
Erstatter den del af strengen, der er angivet af start..end-intervallet, med den beståede streng
StringBuilder deleteCharAt(int index)
Fjerner tegnet med det angivne indeks fra strengen
StringBuilder delete(int start, int end)
Fjerner tegn inden for det angivne interval fra strengen
int indexOf(String str, int index)
Søger efter en understreng i den aktuelle streng
int lastIndexOf(String str, int index)
Søger efter en understreng i den aktuelle streng, startende fra slutningen
char charAt(int index)
Returnerer tegnet i strengen ved det beståede indeks
String substring(int start, int end)
Returnerer understrengen defineret af det angivne interval
StringBuilder reverse()
Vender den aktuelle streng.
void setCharAt(int index, char)
Ændrer tegnet ved det angivne indeks til det beståede tegn
int length()
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
StringBuilder builder = new StringBuilder("Hi");
builder.append("Bye");
builder.append(123);
Hi
HiBye
HiBye123

Konvertering til en standardstreng

"For at konvertere et StringBuilderobjekt til et String-objekt skal du blot kalde dets toString()metode. Eksempel

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

Hvordan sletter jeg et tegn?

"For at slette et tegn i en foranderlig streng, skal du bruge deleteCharAt()metoden. Eksempel:

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

"Udover StringBuilderklassen har Java en anden strenglignende klasse kaldet StringBuffer. Det er en analog af StringBuilderklassen, men dens metoder er markeret med synchronizedmodifikatoren."

"Hvad betyder det?"

"Det betyder, at StringBufferobjektet 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'.