Strenger indre arbeid, og delstrengmetoden - 1

"Hei, Amigo!"

"Hei, Ellie."

"Jeg skal fortelle deg om delstrenger. En delstreng er en del av en streng. Og den vanligste operasjonen som utføres på strenger (etter å ha kombinert flere strenger sammen) er å skaffe en delstreng."

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

"Delstrengmetoden returnerer en del av en streng. Denne metoden har to versjoner."

"Den første versjonen returnerer delstrengen som er spesifisert ved start- og sluttindekser. Men tegnet i sluttindeksen er ikke inkludert! Hvis du passerer tallene 1 og 3, vil delstrengen bare inneholde andre og tredje tegn (husk at indeksene starter med 0)."

"Den andre versjonen returnerer delstrengen fra den beståtte indeksen til slutten av strengen."

Metode(r) 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. Takk, Ellie."

"Jeg skal også forklare den interne funksjonen til String-objekter for deg."

"Som du sikkert allerede vet, er String en uforanderlig klasse. Og hvilke fordeler gir det oss? Når det skjer, er en av hovedfordelene muligheten til å få en understreng. Men først ting først."

"Internt inneholder et String-objekt en rekke tegn, noe som ikke er så vanskelig å gjette. Men det lagrer også to variabler til: indeksen til det første tegnet i matrisen og antall tegn. Nå skal jeg fortelle deg hva disse brukes til."

"Når vi lager en delstreng ved hjelp av delstrengmetoden , opprettes et nytt strengobjekt ."

"Men i stedet for å lagre en referanse til en ny tegnarray, lagrer objektet en referanse til den gamle matrisen samt to variabler som den bruker for å bestemme den delen av den originale tegnmatrisen som er assosiert med den."

— Jeg skjønte ingenting av det.

"Når en delstreng opprettes, kopieres ikke tegnarrayen til det nye String-objektet. I stedet lagrer begge objektene en referanse til den opprinnelige tegnarrayen. Men! Det andre objektet lagrer også to variabler: startindeksen i matrisen og antall tegn som tilhører understrengen."

"Sjekk det ut:"

Får en understreng Hva som er lagret i understrengen
String s = "mama";
Hva er lagret i s:

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

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

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

"Alle tre strengene lagrer en referanse til den samme char-arrayen, men de lagrer også indeksen til de første og siste tegnene som gjelder dem. Eller mer nøyaktig, indeksen til det første tegnet og tegntellingen."

"Det gir mening nå."

"Så, hvis du tar en streng som er 10 000 tegn lang og du lager 10 000 understrenger av en hvilken som helst lengde, vil disse understrengene bruke svært lite minne, fordi tegnarrayen ikke er duplisert. Disse strengene, som du ville forvente å bruke opp mye plass, vil bokstavelig talt bare ta et par byte."

"Kul!"

"Men kunne du gjort det hvis du kunne endre strenger?"

"Nei, noen kunne endre den første strengen, og da ville alle understrengene også endret seg. Nå er det fornuftig hvorfor de gjorde det. Det er en veldig kul løsning."

"Jeg er glad du likte det."