Strings innerlijke werking, en de substring-methode - 1

"Hallo Amigo!"

"Hallo, Elly."

"Ik ga je vertellen over substrings. Een substring is een onderdeel van een string. En de meest gebruikelijke bewerking die op strings wordt uitgevoerd (na het combineren van verschillende strings) is het verkrijgen van een substring."

7) Hoe krijg ik een deel van een String?

"De substring-methode retourneert een deel van een string. Deze methode heeft twee versies."

"De eerste versie retourneert de subtekenreeks die wordt gespecificeerd door begin- en eindindexen. Maar het teken bij de eindindex is niet inbegrepen! Als u de cijfers 1 en 3 doorgeeft, bevat de subtekenreeks alleen de tweede en derde tekens (onthoud de beginindexen met 0)."

"De tweede versie retourneert de subtekenreeks vanaf de doorgegeven index tot het einde van de tekenreeks."

Methode(n) voorbeeld(en)
String substring(int beginIndex, int endIndex)
String s = "Good news, everyone!";
s = s.substring(1,6);
Resultaat:

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

'Dat is eenvoudig genoeg. Bedankt, Ellie.'

"Ik ga je ook de interne werking van String-objecten uitleggen."

"Zoals je waarschijnlijk al weet, is String een onveranderlijke klasse. En welke voordelen levert dat ons op? Een van de belangrijkste voordelen is namelijk de mogelijkheid om een ​​substring te krijgen. Maar eerst en vooral."

"Intern bevat een String-object een reeks tekens, wat niet zo moeilijk te raden is. Maar het slaat ook nog twee variabelen op: de index van het eerste teken in de reeks en het aantal tekens. Nu zal ik je vertellen wat deze worden gebruikt voor."

"Wanneer we een substring maken met behulp van de substring- methode, wordt er een nieuw String- object gemaakt."

"Maar in plaats van een verwijzing naar een nieuwe tekenreeks op te slaan, slaat het object een verwijzing naar de oude reeks op, evenals twee variabelen die het gebruikt om het deel van de oorspronkelijke tekenreeks te bepalen dat ermee is geassocieerd."

"Ik begreep er niets van."

"Wanneer een substring wordt gemaakt, wordt de karakterarray niet gekopieerd naar het nieuwe String-object. In plaats daarvan slaan beide objecten een verwijzing op naar de oorspronkelijke karakterarray. Maar! Het tweede object slaat ook twee variabelen op: de startindex in de array en de aantal tekens dat bij de subtekenreeks hoort."

"Bekijken:"

Een subtekenreeks ophalen Wat is opgeslagen in de subtekenreeks
String s = "mama";
Wat is opgeslagen in s:

char[] value = {'m','a','m','a'};
offset = 0;
count = 4;
String s2 = s.substring(1);
Wat is opgeslagen in s2:

char[] value = {'m','a','m','a'};
offset = 1;
count = 3;
String s3 = s.substring(1, 3);
Wat is opgeslagen in s3:

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

"Alle drie Strings slaan een verwijzing op naar dezelfde char-array, maar ze slaan ook de index op van de eerste en laatste karakters die erop betrekking hebben. Of beter gezegd, de index van het eerste karakter en het aantal karakters."

"Dat is nu logisch."

"Dus als je een string neemt die 10.000 tekens lang is en je maakt 10.000 substrings van elke lengte, zullen deze substrings heel weinig geheugen gebruiken, omdat de tekenreeks niet wordt gedupliceerd. Deze strings, waarvan je zou verwachten dat ze veel ruimte, neemt letterlijk maar een paar bytes in beslag."

"Koel!"

"Maar zou je dat kunnen doen als je Strings zou kunnen wijzigen?"

"Nee, iemand zou de eerste string kunnen veranderen, en dan zouden alle substrings ook veranderen. Nu is het logisch waarom ze dat deden. Dat is echt een coole oplossing."

"Ik ben blij dat je het leuk vond."