1. Ændring af strenge

I Java er strenge uforanderlige objekter. Dette blev gjort for at gøre String-klassen meget optimeret og for at den kunne bruges overalt. For eksempel anbefales kun uforanderlige typer til brug som nøgler i HashMap-samlingen .

Der opstår dog ofte situationer, hvor programmører ville finde det mere bekvemt for Stringklassen at kunne ændres. De vil have en klasse, der ikke opretter en ny understreng, hver gang en af ​​dens metoder kaldes.

Tja, antag, at vi har en meget stor streng, og vi ofte skal tilføje noget til slutningen af ​​den. I dette tilfælde kan selv en samling af tegn ( ArrayList<Character>) være mere effektiv end konstant at genskabe og sammenkæde String-objekter.

Det er netop derfor en String-lignende type, der kan ændres, blev tilføjet til Java-sproget. Det 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

Klassen StringBuilderhar 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 det i 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

Her er en kort beskrivelse af hver metode


2. Beskrivelse af metoder:

Tilføjelse til en streng

Brug metoden for at tilføje noget til en foranderlig streng ( StringBuilder) append(). 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


3. Nyttige eksempler på arbejde med strenge

Hvordan vender jeg en streng om?

Der er en særlig 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

StringBufferklasse

Der er en anden klasse — StringBuffer, som er en analog af klassen StringBuilder, men dens metoder er markeret med synchronizedmodifikatoren. Det betyder, at StringBufferobjektet kan tilgås samtidigt fra flere tråde.

Men det er meget langsommere end StringBuilder. Du kan få brug for denne klasse, når du begynder aktivt at udforske multithreading i Java Multithreading- questen.