“สวัสดี อามีโก้!”
"สวัสดี เอลลี่"
"ฉันจะบอกคุณเกี่ยวกับสตริงย่อย สตริงย่อยเป็นส่วนหนึ่งของสตริง และการดำเนินการทั่วไปที่ทำกับสตริง (หลังจากรวมสตริงหลายตัวเข้าด้วยกัน) คือการได้รับสตริงย่อย"
7) ฉันจะเป็นส่วนหนึ่งของสตริงได้อย่างไร
"เมธอดสตริงย่อยส่งคืนส่วนหนึ่งของสตริง เมธอดนี้มี 2 เวอร์ชัน"
"เวอร์ชันแรกจะส่งคืนสตริงย่อยที่ระบุโดยดัชนีเริ่มต้นและสิ้นสุดแต่อักขระที่ดัชนีสิ้นสุดจะไม่รวมอยู่ด้วย!หากคุณผ่านหมายเลข 1 และ 3 สตริงย่อยจะมีเฉพาะอักขระที่สองและสามเท่านั้น (โปรดจำไว้ว่าดัชนีเริ่มต้น ด้วย 0)"
"เวอร์ชันที่สองจะส่งคืนสตริงย่อยที่เริ่มต้นจากดัชนีที่ส่งผ่านไปจนถึงจุดสิ้นสุดของสตริง"
วิธีการ | ตัวอย่าง) |
---|---|
|
|
ผลลัพธ์:
|
|
|
|
"ง่ายพอ ขอบคุณ Ellie"
"ฉันจะอธิบายการทำงานภายในของวัตถุสตริงให้คุณด้วย"
"อย่างที่คุณคงทราบกันดีอยู่แล้วว่า String เป็นคลาสที่ไม่เปลี่ยนรูปแบบ และข้อดีนั้นให้อะไรกับเราบ้าง เมื่อมันเกิดขึ้น ข้อดีหลักประการหนึ่งคือความสามารถในการรับสตริงย่อย แต่สิ่งแรกต้องมาก่อน"
"ภายใน อ็อบเจกต์สตริงประกอบด้วยอาร์เรย์ของอักขระ ซึ่งเดาได้ไม่ยากนัก แต่มันยังเก็บตัวแปรอีกสองตัว: ดัชนีของอักขระตัวแรกในอาร์เรย์และจำนวนอักขระ ตอนนี้ฉันจะบอกคุณว่าสิ่งเหล่านี้ ใช้สำหรับ"
"เมื่อเราสร้างสตริงย่อยโดยใช้ เมธอด สตริงย่อย วัตถุ สตริงใหม่จะถูกสร้างขึ้น"
"แต่แทนที่จะจัดเก็บการอ้างอิงไปยังอาร์เรย์อักขระใหม่ ออบเจ็กต์จะเก็บการอ้างอิงไปยังอาร์เรย์เก่ารวมทั้งตัวแปรสองตัวที่ใช้เพื่อกำหนดส่วนของอาร์เรย์อักขระดั้งเดิมที่เชื่อมโยงกับอาร์เรย์"
"ฉันไม่เข้าใจอะไรเลย"
"เมื่อสตริงย่อยถูกสร้างขึ้น อาร์เรย์อักขระจะไม่ถูกคัดลอกไปยังอ็อบเจกต์สตริงใหม่ แต่อ็อบเจกต์ทั้งสองจะเก็บการอ้างอิงไปยังอาร์เรย์อักขระดั้งเดิม แต่! ออบเจกต์ที่สองยังเก็บตัวแปรสองตัว: ดัชนีเริ่มต้นในอาร์เรย์และ จำนวนอักขระที่เป็นของสตริงย่อย"
"ลองดู:"
รับสตริงย่อย | สิ่งที่เก็บไว้ภายในสตริงย่อย |
---|---|
|
มีอะไรเก็บไว้ใน s:
|
|
สิ่งที่เก็บไว้ใน s2:
|
|
สิ่งที่เก็บไว้ใน s3:
|
"สตริงทั้งสามจัดเก็บการอ้างอิงไปยังอาร์เรย์อักขระเดียวกัน แต่ยังจัดเก็บดัชนีของอักขระตัวแรกและตัวสุดท้ายที่เกี่ยวข้อง หรือให้แม่นยำยิ่งขึ้น ดัชนีของอักขระตัวแรกและจำนวนอักขระ"
"นั่นสมเหตุสมผลแล้ว"
"ดังนั้น ถ้าคุณใช้สตริงที่มีความยาว 10,000 อักขระ และสร้างสตริงย่อย 10,000 สตริงที่มีความยาวเท่าใดก็ได้ สตริงย่อยเหล่านี้จะใช้หน่วยความจำน้อยมาก เนื่องจากอาร์เรย์อักขระจะไม่ซ้ำกัน สตริงเหล่านี้ซึ่งคุณคาดว่าจะใช้มาก ของพื้นที่ จะใช้เพียงไม่กี่ไบต์เท่านั้น"
"เย็น!"
"แต่คุณทำอย่างนั้นได้ไหม ถ้าคุณสามารถแก้ไขสตริงได้"
"ไม่ ใครบางคนสามารถเปลี่ยนสตริงแรกได้ จากนั้นสตริงย่อยทั้งหมดก็จะเปลี่ยนไปด้วย ตอนนี้มันสมเหตุสมผลแล้วว่าทำไมพวกเขาถึงทำเช่นนั้น นั่นเป็นวิธีแก้ปัญหาที่ยอดเยี่ยมจริงๆ"
"ฉันดีใจที่คุณชอบมัน."
GO TO FULL VERSION