การจัดการ String
แนะนำใหม่| English | ความหมาย |
|---|---|
| immutable/ɪˈmjuːtəbl/ | ค่าที่ไม่เปลี่ยนแปลงได้ |
Strings และการเข้าถึงตำแหน่ง
- A
Stringคือลำดับของตัวอักษร, มีเลขระบุตั้งแต่0 - ใน
"HELLO", index0คือ'H', index1คือ'E', … index4คือ'O' s.length()ให้จำนวนของตัวอักษร; index สุดท้ายคือlength() - 1- ข้อผิดพลาด Off-by-one ที่นี่คือ String bug ที่พบบ่อยที่สุด
substring
s.substring(start, end)ส่งคืนตัวอักษรจาก indexstartจนถึงแต่ไม่รวมend"HELLO".substring(1, 3)→"EL"(indices1และ2, ไม่ใช่3)s.substring(start)(argument หนึ่งตัว) ไปจากstartถึงท้าย- ความยาวของผลลัพธ์คือ
end - start
indexOf และ equals
s.indexOf("lo")ส่งคืน index แรกที่ข้อความปรากฏ, หรือ-1หากไม่พบs.equals(t)ทดสอบว่าสอง Strings มี ตัวอักษรเหมือนกัน — ส่งคืนboolean- ใช้
.equals(), ห้ามใช้==, เพื่อเปรียบเทียบเนื้อหา String ==เปรียบเทียบ references (ที่อยู่), ไม่ใช่ตัวอักษร
Strings เป็น immutable
- A String เป็น immutable: ตัวอักษรของมันไม่สามารถ เปลี่ยนแปลง ได้เลยหลังจากถูกสร้าง
- Methods เช่น
substringและtoUpperCaseส่งคืน String ใหม่ — พวกเขาไม่ได้แก้ไขต้นฉบับ s.toUpperCase();เพียงอย่างเดียวทำอะไรไม่ได้; คุณต้องจัดเก็บผลลัพธ์:s = s.toUpperCase();- Immutability คือเหตุผลที่ String methods ส่งคืนค่าใหม่เสมอ
เปรียบเทียบเนื้อหา String ด้วย .equals(), ห้ามใช้ ==. == ทดสอบว่าสอง references ชี้ไปยัง ออบเจกต์เดียวกัน, ไม่ใช่ว่าตัวอักษรตรงกัน — ดังนั้น a == b อาจเป็น false แม้ว่าจะมีทั้งสองเป็น "cat" และ Strings เป็น immutable: s.toUpperCase() ส่งคืน String ใหม่และทำให้ s ไม่เปลี่ยนแปลงเว้นแต่คุณจะ reassign s = s.toUpperCase();
การทำงานกับ "HELLO":
"HELLO".length()→5; index0คือ'H', index4คือ'O'"HELLO".substring(1, 4)→"ELL"(indices1, 2, 3)"HELLO".indexOf("L")→2(firstL);.equals("hello")→false(case แตกต่างกัน)
A String ถูก indexing จาก 0 (indexสุดท้าย length()-1). substring(start, end) ส่งคืน indices start ถึง end-1; indexOf หาตำแหน่ง (หรือ -1). เปรียบเทียบเนื้อหาด้วย .equals(), ไม่ใช่ ==. Strings เป็น immutable — methods ส่งคืน String ใหม่, ดังนั้นควร reassign เพื่อรักษาการเปลี่ยนแปลง
การเข้าถึง索引 HELLO เริ่มจาก 0
substring(1, 4) ใช้ indices 1, 2, 3 → ELL
ใน String "HELLO", ตัวอักษรใดอยู่ที่ index 0?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
String ถูก access ด้วย index เริ่มจาก 0 ดังนั้น index 0 คือ 'H'
"HELLO".substring(1, 3) ส่งคืนอะไร?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Indices 1 และ 2 (จนถึงแต่ไม่รวมถึง 3) → EL
เพื่อเปรียบเทียบว่า Two Strings มีตัวอักษรเหมือนกันหรือไม่ คุณควรใช้...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
.equals() เปรียบเทียบเนื้อหา; == เปรียบเทียบการอ้างอิง
s.toUpperCase(); โดยตรงไม่ได้เปลี่ยน String s ในที่
Difficulty 1/5 · 100 coins + a small bonus on first completion today
String เป็น immutable — คุณต้อง reassign s = s.toUpperCase();
"HELLO".indexOf("L") ส่งคืนอะไร (L ตัวแรก)?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
'L' ตัวแรกอยู่ที่ index 2