ประเด็นCharSequence
คือเพื่อให้มุมมองแบบอ่านอย่างเดียวกับลำดับตัวอักษรและนั่นคือมัน อินเตอร์เฟสนี้ไม่มีการจัดการสตริงหรือวิธีการค้นหาใด ๆ สิ่งเหล่านั้นอยู่นอกขอบเขต
หลักการแยกส่วนต่อประสานแสดงให้เห็นว่าลูกค้าประเภทไม่ควรพึ่งพาวิธีการที่พวกเขาไม่ได้ใช้ ดังนั้นอินเตอร์เฟสควรประกาศเฉพาะชุดที่มีประโยชน์น้อยที่สุดเท่านั้น หากกรณีการใช้งานที่แตกต่างกันต้องการวิธีการที่แตกต่างกันควรมีอินเตอร์เฟซที่แตกต่างกัน
ไคลเอนต์ที่ต้องการแหล่งอักขระเท่านั้นอาจไม่ต้องการวิธีการค้นหา
แน่นอนว่าเป็นไปได้ที่จะหักล้างหลักการนี้และจบลงด้วยอินเตอร์เฟซเล็ก ๆ น้อย ๆ นับพัน ไม่ดีเหมือนกัน ดังนั้นCharSequence
อินเตอร์เฟซที่ไม่เพียง แต่มีน้อยที่สุดcharAt()
และlength()
วิธีการ subSequence()
แต่ยังเป็นวิธีที่สะดวกสบายที่เกี่ยวข้องอย่างลึกซึ้ง (CharSequence สามารถให้มุมมองในการเรียงลำดับโดยไม่ต้องคัดลอกสตริงซึ่งเป็นเหตุผลที่นี้ควรเป็นวิธีการตัวอย่าง) ระบุtoString()
เป็น OK Object
เนื่องจากวิธีการที่จะได้รับมรดกอยู่แล้วจาก วิธีการchars()
และcodePoints()
ปรับให้เข้าCharSequence
กับStream
ส่วนต่อประสาน CharSequence
เพราะสิ่งเหล่านี้เป็นวิธีเริ่มต้นพวกเขาไม่ได้กำหนดความต้องการที่เพิ่มขึ้นสำหรับการดำเนินการในชั้นเรียน
CharSequence
ประเภทจะเป็นประโยชน์เมื่อวิธีการที่จำเป็นต้องมีแหล่งที่มาของตัวละครทั่วไปโดยไม่ได้ระบุการดำเนินการโดยเฉพาะ (เช่น String กับ CharBuffer กับ StringBuilder) String#join()
และString#contains()
วิธีการเป็นตัวอย่างที่ดีของการใช้CharSequence
s
ไม่จำเป็นต้องCharSequence
จัดเตรียมcontains()
วิธีการเนื่องจากสามารถนำไปใช้ภายนอกได้ ในขณะที่ Java ไม่มีความสะดวกสบายของวิธีการขยาย C # วิธีแบบคงที่เป็นหลักสิ่งเดียวกัน ดังนั้นแทนที่จะboolean Editable#contains(CharSequence needle)
เป็นstatic boolean contains(CharSequence haystack, CharSequence needle)
คุณ อัลกอริธึมการค้นหาสตริงเป็นหัวข้อวิทยาศาสตร์คอมพิวเตอร์ที่ได้รับการศึกษาเป็นอย่างดี อัลกอริทึมที่แตกต่างกับการแลกเปลี่ยนที่แตกต่างกันจะพร้อมใช้งาน
อ่านเพิ่มเติม:
contains
ไม่ได้เป็นวิธีการกลายพันธุ์และมีไม่วิธีการที่มีอยู่การค้นหา (charAt
) ดังนั้นวิธีนี้จะใช้ ?. นอกจากนี้ " เนื่องจากสิ่งเหล่านี้เป็นวิธีการเริ่มต้นจึงไม่ได้กำหนดข้อกำหนดเพิ่มเติมสำหรับคลาสที่ใช้ CharSequence " - ไม่contains
สามารถใช้เป็นค่าเริ่มต้นผ่านทาง implreturn to String().contains(...)
ลบข้อกำหนดสำหรับคลาสที่จะใช้งานได้หรือไม่