Dizelerin iç işleyişi ve alt dize yöntemi - 1

"Merhaba, Amigo!"

"Merhaba, Ellie."

"Size alt dizilerden bahsedeceğim. Bir alt dizi, bir dizinin parçasıdır. Ve diziler üzerinde yapılan en yaygın işlem (birkaç diziyi birleştirdikten sonra) bir alt dizi elde etmektir."

7) Bir String'in bir parçasını nasıl alabilirim?

"Substring yöntemi, String'in bir bölümünü döndürür. Bu yöntemin iki versiyonu vardır."

"İlk versiyon, başlangıç ​​ve bitiş indeksleri tarafından belirtilen alt dizgiyi döndürür. Ancak bitiş indeksindeki karakter dahil değildir! 1 ve 3 rakamlarını geçerseniz, alt dizgi yalnızca ikinci ve üçüncü karakterleri içerecektir (başlangıç ​​indekslerini unutmayın). 0 ile)."

"İkinci sürüm, geçirilen dizinden başlayarak Dizenin sonuna kadar alt dizeyi döndürür."

Yöntem(ler) Örnek(ler)
String substring(int beginIndex, int endIndex)
String s = "Good news, everyone!";
s = s.substring(1,6);
Sonuç:

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

"Bu yeterince basit. Teşekkürler Ellie."

"Ayrıca size String nesnelerinin iç işleyişini de açıklayacağım."

"Muhtemelen zaten bildiğiniz gibi, String değişmez bir sınıftır. Ve bu bize ne gibi avantajlar sağlar? Olduğu gibi, en önemli avantajlardan biri bir alt dizi alma yeteneğidir. Ama önce ilk şeyler."

"Dahili olarak, bir String nesnesi, tahmin etmesi zor olmayan bir dizi karakter içerir. Ama aynı zamanda iki değişken daha saklar: dizideki ilk karakterin dizini ve karakter sayısı. Şimdi size bunların ne olduğunu anlatacağım. için kullanılır."

" substring yöntemini kullanarak bir substring oluşturduğumuzda , yeni bir String nesnesi yaratılır."

"Ancak, yeni bir karakter dizisine bir referansı depolamak yerine, nesne eski diziye bir referansı ve orijinal karakter dizisinin onunla ilişkili bölümünü belirlemek için kullandığı iki değişkeni depolar."

"Bunlardan hiçbir şey anlamadım."

"Bir alt dize oluşturulduğunda, karakter dizisi yeni String nesnesine kopyalanmaz. Bunun yerine, her iki nesne de orijinal karakter dizisine bir referans depolar. Ancak! İkinci nesne ayrıca iki değişken depolar: dizideki başlangıç ​​dizini ve alt dizeye ait karakter sayısı."

"Buna bir bak:"

Bir alt dize alma Alt dizenin içinde ne depolanır?
String s = "mama";
s'de neler saklanır:

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

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

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

"Üç Dize de aynı karakter dizisine bir referans depolar, ancak aynı zamanda kendileriyle ilgili ilk ve son karakterlerin dizinini de depolarlar. Veya daha doğrusu, ilk karakterin dizini ve karakter sayısı."

"Bu şimdi mantıklı."

"Yani, 10.000 karakter uzunluğunda bir Dizi alırsanız ve herhangi bir uzunlukta 10.000 alt dizi oluşturursanız, bu alt diziler çok az bellek kullanır, çünkü karakter dizisi kopyalanmaz. Çok fazla kullanmayı beklediğiniz bu Diziler alan, kelimenin tam anlamıyla yalnızca birkaç bayt alacaktır."

"Serin!"

"Ama Dizeleri değiştirebilseydin bunu yapabilir miydin?"

"Hayır, birisi ilk String'i değiştirebilir ve ardından tüm alt stringleri de değişir. Bunu neden yaptıkları şimdi anlaşıldı. Bu gerçekten harika bir çözüm."

"Beğendiğine sevindim."