Rentetan kerja dalaman, dan kaedah subrentetan - 1

"Hai, Amigo!"

"Hai, Ellie."

"Saya akan memberitahu anda tentang subrentetan. Substring ialah sebahagian daripada rentetan. Dan operasi yang paling biasa dilakukan pada rentetan (selepas menggabungkan beberapa rentetan bersama) ialah mendapatkan subrentetan."

7) Bagaimanakah saya boleh mendapatkan sebahagian daripada String?

"Kaedah subrentetan mengembalikan sebahagian daripada String. Kaedah ini mempunyai dua versi."

"Versi pertama mengembalikan subrentetan yang ditentukan oleh indeks permulaan dan penamat. Tetapi aksara pada indeks penamat tidak disertakan! Jika anda melepasi nombor 1 dan 3, maka subrentetan hanya akan mengandungi aksara kedua dan ketiga (ingat indeks bermula dengan 0)."

"Versi kedua mengembalikan subrentetan bermula dari indeks yang diluluskan sehingga penghujung String."

Kaedah Contoh)
String substring(int beginIndex, int endIndex)
String s = "Good news, everyone!";
s = s.substring(1,6);
Keputusan:

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

"Itu cukup mudah. ​​Terima kasih, Ellie."

"Saya juga akan menerangkan cara kerja dalaman objek String kepada anda."

"Seperti yang anda mungkin sedia maklum, String ialah kelas yang tidak berubah. Dan apakah kelebihan yang diberikan kepada kita? Seperti yang berlaku, salah satu kelebihan utama ialah keupayaan untuk mendapatkan subrentetan. Tetapi perkara pertama dahulu."

"Secara dalaman, objek String mengandungi tatasusunan aksara, yang tidak begitu sukar untuk diteka. Tetapi ia juga menyimpan dua lagi pembolehubah: indeks aksara pertama dalam tatasusunan dan kiraan aksara. Sekarang saya akan memberitahu anda apa ini digunakan untuk."

"Apabila kita mencipta subrentetan menggunakan kaedah substring , objek String baharu dicipta."

"Tetapi, daripada menyimpan rujukan kepada tatasusunan aksara baharu, objek itu menyimpan rujukan kepada tatasusunan lama serta dua pembolehubah yang digunakan untuk menentukan bahagian tatasusunan aksara asal yang dikaitkan dengannya."

"Saya tidak faham semua itu."

"Apabila subrentetan dicipta, tatasusunan aksara tidak disalin ke objek String baharu. Sebaliknya, kedua-dua objek menyimpan rujukan kepada tatasusunan aksara asal. Tetapi! Objek kedua juga menyimpan dua pembolehubah: indeks permulaannya dalam tatasusunan dan bilangan aksara yang tergolong dalam subrentetan."

"Lihatlah:"

Mendapatkan subrentetan Apa yang disimpan di dalam subrentetan
String s = "mama";
Apa yang disimpan dalam s:

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

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

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

"Ketiga-tiga Rentetan menyimpan rujukan kepada tatasusunan aksara yang sama, tetapi mereka juga menyimpan indeks aksara pertama dan terakhir yang berkaitan dengannya. Atau lebih tepat lagi, indeks aksara pertama dan kiraan aksara."

"Itu masuk akal sekarang."

"Jadi, jika anda mengambil String sepanjang 10,000 aksara dan anda mencipta 10,000 subrentetan daripada sebarang panjang, substring ini akan menggunakan memori yang sangat sedikit, kerana tatasusunan aksara tidak diduplikasi. Strings ini, yang anda jangkakan akan menggunakan banyak ruang, secara literal hanya akan mengambil beberapa bait."

"Sejuk!"

"Tetapi bolehkah anda melakukannya jika anda boleh mengubah suai Strings?"

"Tidak, seseorang boleh menukar Rentetan pertama, dan kemudian semua subrentetannya juga akan berubah. Sekarang masuk akal mengapa mereka berbuat demikian. Itu adalah penyelesaian yang sangat bagus."

"Saya gembira anda menyukainya."