Strenge indre funktioner og understrengsmetoden - 1

"Hej, Amigo!"

"Hej, Ellie."

"Jeg vil fortælle dig om understrenge. En understreng er en del af en streng. Og den mest almindelige operation udført på strenge (efter at have kombineret flere strenge sammen) er at få en understreng."

7) Hvordan får jeg en del af en streng?

"Understrengmetoden returnerer en del af en streng. Denne metode har to versioner."

"Den første version returnerer den delstreng, der er angivet ved start- og slutindekser. Men tegnet ved slutindekset er ikke inkluderet! Hvis du passerer tallene 1 og 3, så vil understrengen kun indeholde det andet og tredje tegn (husk at indeksene starter med 0)."

"Den anden version returnerer understrengen fra det beståede indeks til slutningen af ​​strengen."

Metoder) Eksempel(r)
String substring(int beginIndex, int endIndex)
String s = "Good news, everyone!";
s = s.substring(1,6);
Resultat:

s == "ood n";
String substring(int beginIndex)
String s = "Good news, everyone!";
s = s.substring(1);

"Det er enkelt nok. Tak, Ellie."

"Jeg vil også forklare String-objekternes interne funktion for dig."

"Som du sikkert allerede ved, er String en uforanderlig klasse. Og hvilke fordele giver det os? Som det sker, er en af ​​de vigtigste fordele muligheden for at få en understreng. Men først og fremmest."

"Internt indeholder et String-objekt et array af tegn, hvilket ikke er så svært at gætte. Men det gemmer også to variabler: indekset for det første tegn i arrayet og tegnantal. Nu vil jeg fortælle dig, hvad disse bruges til."

"Når vi opretter en understreng ved hjælp af understrengsmetoden , oprettes et nyt String- objekt."

"Men i stedet for at gemme en reference til et nyt tegnarray, gemmer objektet en reference til det gamle array samt to variabler, som det bruger til at bestemme den del af det originale tegnarray, der er forbundet med det."

"Det forstod jeg ikke noget af."

"Når der oprettes en understreng, kopieres tegnarrayet ikke til det nye String-objekt. I stedet gemmer begge objekter en reference til det originale tegnarray. Men! Det andet objekt gemmer også to variabler: dets startindeks i arrayet og antal tegn, der hører til understrengen."

"Tjek det ud:"

Henter en understreng Hvad er gemt inde i understrengen
String s = "mama";
Hvad er gemt i s:

char[] value = {'m','a','m','a'};
offset = 0;
count = 4;
String s2 = s.substring(1);
Hvad er gemt i s2:

char[] value = {'m','a','m','a'};
offset = 1;
count = 3;
String s3 = s.substring(1, 3);
Hvad er gemt i s3:

char[] value = {'m','a','m','a'};
offset = 1;
count = 2;

"Alle tre strenge gemmer en reference til det samme char-array, men de gemmer også indekset for de første og sidste tegn, der vedrører dem. Eller mere præcist, indekset for det første tegn og tegnantal."

"Det giver mening nu."

"Så hvis du tager en streng, der er 10.000 tegn lang, og du opretter 10.000 understrenge af en hvilken som helst længde, vil disse understrenge bruge meget lidt hukommelse, fordi tegnarrayet ikke er duplikeret. Disse strenge, som du ville forvente at ville bruge meget plads, vil bogstaveligt talt kun tage et par bytes."

"Fedt nok!"

"Men kunne du gøre det, hvis du kunne ændre Strings?"

"Nej, nogen kunne ændre den første streng, og så ville alle dens understrenge også ændre sig. Nu giver det mening, hvorfor de gjorde det. Det er en rigtig fed løsning."

"Jeg er glad for at du kunne lide det."