Strängars inre funktioner och delsträngsmetoden - 1

"Hej, Amigo!"

"Hej Ellie."

"Jag ska berätta om delsträngar. En delsträng är en del av en sträng. Och den vanligaste operationen som utförs på strängar (efter att ha kombinerat flera strängar) är att erhålla en delsträng."

7) Hur får jag del av en sträng?

"Delsträngsmetoden returnerar en del av en sträng. Denna metod har två versioner."

"Den första versionen returnerar delsträngen som anges av start- och slutindex. Men tecknet i slutindexet ingår inte! Om du passerar siffrorna 1 och 3 kommer delsträngen bara att innehålla det andra och tredje tecknet (kom ihåg att indexen börjar med 0)."

"Den andra versionen returnerar delsträngen från det godkända indexet till slutet av strängen."

Metod(er) Exempel
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 är enkelt nog. Tack, Ellie."

"Jag ska också förklara String-objektens interna funktion för dig."

"Som du säkert redan vet är String en oföränderlig klass. Och vilka fördelar ger det oss? När det händer är en av de viktigaste fördelarna möjligheten att få en delsträng. Men först till kvarn."

"Internt innehåller ett String-objekt en rad tecken, vilket inte är så svårt att gissa. Men det lagrar också två variabler till: indexet för det första tecknet i arrayen och antalet tecken. Nu ska jag berätta vad dessa används för."

"När vi skapar en delsträng med hjälp av delsträngsmetoden skapas ett nytt String -objekt."

"Men istället för att lagra en referens till en ny teckenmatris, lagrar objektet en referens till den gamla matrisen samt två variabler som det använder för att bestämma den del av den ursprungliga teckenmatrisen som är associerad med den."

"Jag förstod ingenting av det där."

"När en delsträng skapas, kopieras inte teckenmatrisen till det nya String-objektet. I stället lagrar båda objekten en referens till den ursprungliga teckenmatrisen. Men! Det andra objektet lagrar också två variabler: dess startindex i matrisen och antal tecken som hör till understrängen."

"Kolla in det:"

Få en delsträng Vad som lagras inuti delsträngen
String s = "mama";
Vad som lagras i s:

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

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

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

"Alla tre strängarna lagrar en referens till samma teckenuppsättning, men de lagrar också indexet för de första och sista tecknen som hör till dem. Eller rättare sagt, indexet för det första tecknet och antalet tecken."

"Det är vettigt nu."

"Så, om du tar en sträng som är 10 000 tecken lång och du skapar 10 000 understrängar av valfri längd, kommer dessa understrängar att använda väldigt lite minne, eftersom teckenuppsättningen inte är duplicerad. Dessa strängar, som du skulle förvänta dig att använda mycket utrymme, tar bokstavligen bara ett par byte."

"Häftigt!"

"Men skulle du kunna göra det om du kunde modifiera strängar?"

"Nej, någon kunde ändra den första strängen, och då skulle alla dess understrängar också ändras. Nu är det vettigt varför de gjorde det. Det är en riktigt cool lösning."

"Jag är glad att du gillade det."