CodeGym /หลักสูตร /Java มัลติเธรด /การทำงานภายในของสตริงและวิธีการย่อย

การทำงานภายในของสตริงและวิธีการย่อย

Java มัลติเธรด
ระดับ , บทเรียน
มีอยู่
การทำงานภายในของสตริงและวิธีการย่อย - 1

“สวัสดี อามีโก้!”

"สวัสดี เอลลี่"

"ฉันจะบอกคุณเกี่ยวกับสตริงย่อย สตริงย่อยเป็นส่วนหนึ่งของสตริง และการดำเนินการทั่วไปที่ทำกับสตริง (หลังจากรวมสตริงหลายตัวเข้าด้วยกัน) คือการได้รับสตริงย่อย"

7) ฉันจะเป็นส่วนหนึ่งของสตริงได้อย่างไร

"เมธอดสตริงย่อยส่งคืนส่วนหนึ่งของสตริง เมธอดนี้มี 2 เวอร์ชัน"

"เวอร์ชันแรกจะส่งคืนสตริงย่อยที่ระบุโดยดัชนีเริ่มต้นและสิ้นสุดแต่อักขระที่ดัชนีสิ้นสุดจะไม่รวมอยู่ด้วย!หากคุณผ่านหมายเลข 1 และ 3 สตริงย่อยจะมีเฉพาะอักขระที่สองและสามเท่านั้น (โปรดจำไว้ว่าดัชนีเริ่มต้น ด้วย 0)"

"เวอร์ชันที่สองจะส่งคืนสตริงย่อยที่เริ่มต้นจากดัชนีที่ส่งผ่านไปจนถึงจุดสิ้นสุดของสตริง"

วิธีการ ตัวอย่าง)
String substring(int beginIndex, int endIndex)
String s = "Good news, everyone!";
s = s.substring(1,6);
ผลลัพธ์:

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

"ง่ายพอ ขอบคุณ Ellie"

"ฉันจะอธิบายการทำงานภายในของวัตถุสตริงให้คุณด้วย"

"อย่างที่คุณคงทราบกันดีอยู่แล้วว่า String เป็นคลาสที่ไม่เปลี่ยนรูปแบบ และข้อดีนั้นให้อะไรกับเราบ้าง เมื่อมันเกิดขึ้น ข้อดีหลักประการหนึ่งคือความสามารถในการรับสตริงย่อย แต่สิ่งแรกต้องมาก่อน"

"ภายใน อ็อบเจกต์สตริงประกอบด้วยอาร์เรย์ของอักขระ ซึ่งเดาได้ไม่ยากนัก แต่มันยังเก็บตัวแปรอีกสองตัว: ดัชนีของอักขระตัวแรกในอาร์เรย์และจำนวนอักขระ ตอนนี้ฉันจะบอกคุณว่าสิ่งเหล่านี้ ใช้สำหรับ"

"เมื่อเราสร้างสตริงย่อยโดยใช้ เมธอด สตริงย่อย วัตถุ สตริงใหม่จะถูกสร้างขึ้น"

"แต่แทนที่จะจัดเก็บการอ้างอิงไปยังอาร์เรย์อักขระใหม่ ออบเจ็กต์จะเก็บการอ้างอิงไปยังอาร์เรย์เก่ารวมทั้งตัวแปรสองตัวที่ใช้เพื่อกำหนดส่วนของอาร์เรย์อักขระดั้งเดิมที่เชื่อมโยงกับอาร์เรย์"

"ฉันไม่เข้าใจอะไรเลย"

"เมื่อสตริงย่อยถูกสร้างขึ้น อาร์เรย์อักขระจะไม่ถูกคัดลอกไปยังอ็อบเจกต์สตริงใหม่ แต่อ็อบเจกต์ทั้งสองจะเก็บการอ้างอิงไปยังอาร์เรย์อักขระดั้งเดิม แต่! ออบเจกต์ที่สองยังเก็บตัวแปรสองตัว: ดัชนีเริ่มต้นในอาร์เรย์และ จำนวนอักขระที่เป็นของสตริงย่อย"

"ลองดู:"

รับสตริงย่อย สิ่งที่เก็บไว้ภายในสตริงย่อย
String s = "mama";
มีอะไรเก็บไว้ใน s:

char[] value = {'m','a','m','a'};
offset = 0;
count = 4;
String s2 = s.substring(1);
สิ่งที่เก็บไว้ใน s2:

char[] value = {'m','a','m','a'};
offset = 1;
count = 3;
String s3 = s.substring(1, 3);
สิ่งที่เก็บไว้ใน s3:

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

"สตริงทั้งสามจัดเก็บการอ้างอิงไปยังอาร์เรย์อักขระเดียวกัน แต่ยังจัดเก็บดัชนีของอักขระตัวแรกและตัวสุดท้ายที่เกี่ยวข้อง หรือให้แม่นยำยิ่งขึ้น ดัชนีของอักขระตัวแรกและจำนวนอักขระ"

"นั่นสมเหตุสมผลแล้ว"

"ดังนั้น ถ้าคุณใช้สตริงที่มีความยาว 10,000 อักขระ และสร้างสตริงย่อย 10,000 สตริงที่มีความยาวเท่าใดก็ได้ สตริงย่อยเหล่านี้จะใช้หน่วยความจำน้อยมาก เนื่องจากอาร์เรย์อักขระจะไม่ซ้ำกัน สตริงเหล่านี้ซึ่งคุณคาดว่าจะใช้มาก ของพื้นที่ จะใช้เพียงไม่กี่ไบต์เท่านั้น"

"เย็น!"

"แต่คุณทำอย่างนั้นได้ไหม ถ้าคุณสามารถแก้ไขสตริงได้"

"ไม่ ใครบางคนสามารถเปลี่ยนสตริงแรกได้ จากนั้นสตริงย่อยทั้งหมดก็จะเปลี่ยนไปด้วย ตอนนี้มันสมเหตุสมผลแล้วว่าทำไมพวกเขาถึงทำเช่นนั้น นั่นเป็นวิธีแก้ปัญหาที่ยอดเยี่ยมจริงๆ"

"ฉันดีใจที่คุณชอบมัน."

ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION