1. Endre strenger

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

Imidlertid oppstår det ofte situasjoner når programmerere vil finne det mer praktisk for Stringklassen å være foranderlig. De vil ha en klasse som ikke lager en ny understreng hver gang en av metodene kalles.

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

Det er nettopp derfor en strenglignende type som kan endres ble lagt til Java-språket. Det kalles 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 setning som denne:

StringBuilder name = new StringBuilder();

Liste over metoder

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

Her er en kort beskrivelse av hver metode


2. Beskrivelse av metoder:

Legger til en streng

For å legge til noe i en mutbar 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 finnes 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


3. Nyttige eksempler på arbeid med strenger

Hvordan snur jeg en streng?

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

StringBufferklasse

Det er en annen klasse - StringBuffer, som er en analog av StringBuilderklassen, men metodene er merket med synchronizedmodifikatoren. Det betyr at StringBufferobjektet kan nås samtidig fra flere tråder.

Men det er mye tregere enn StringBuilder. Du kan trenge denne klassen når du begynner å aktivt utforske multithreading i Java Multithreading- oppdraget.