เมื่อแก้ไขสตริง คุณต้องใช้คลาส StringBuffer และ StringBuilder
ไม่เหมือนกับคลาส String วัตถุของคลาส StringBuffer และ StringBuilder สามารถแก้ไขได้หลายครั้งโดยไม่ต้องสร้างวัตถุใหม่ที่ไม่ได้ใช้
คลาส StringBuilder ถูกเสนอใน Java 5 ความแตกต่างที่ใหญ่ที่สุดระหว่างมันกับ StringBuffer ก็คือ StringBuilder วิธีการนี้ไม่ปลอดภัยสำหรับเธรด (ความปลอดภัยของเธรดหมายความว่าเมื่อมีการเข้าถึงแบบหลายเธรด กลไกการล็อคจะถูกใช้ เมื่อเธรดเข้าถึงข้อมูลบางอย่างของคลาสนี้ จะได้รับการปกป้องและเธรดอื่น ๆ จะไม่สามารถเข้าถึงได้จนกว่าเธรดจะอ่านเสร็จ เธรดอื่น ๆ สามารถใช้ได้ จะไม่มีข้อมูลที่ไม่สอดคล้องกันหรือมลภาวะของข้อมูล หมายความว่าไม่มีการป้องกันการเข้าถึงข้อมูล และอาจเป็นไปได้ว่าหลายเธรดเปลี่ยนแปลงข้อมูลอย่างต่อเนื่องและข้อมูลผลลัพธ์เป็นข้อมูลที่สกปรก)
เนื่องจาก StringBuilder มีข้อได้เปรียบด้านความเร็วเมื่อเทียบกับ StringBuffer จึงแนะนำให้ใช้คลาส StringBuilder ในกรณีส่วนใหญ่ อย่างไรก็ตาม เมื่อแอปพลิเคชันต้องการความปลอดภัยของเธรด ต้องใช้คลาส StringBuffer
public class Test{ public static void main(String args[]){ StringBuffer sBuffer = new StringBuffer(" test"); sBuffer.append(" String Buffer"); System.out.println(sBuffer); } }
ผลการรวบรวมและการทำงานของตัวอย่างข้างต้นมีดังนี้:
test String Buffer
ต่อไปนี้เป็นวิธีการหลักที่คลาส StringBuffer รองรับ:
หมายเลขซีเรียล | คำอธิบายวิธีการ |
---|---|
1 | สาธารณะ StringBuffer ผนวก (สตริง s) ผนวกสตริงที่ระบุในลำดับอักขระนี้ |
2 | public StringBuffer Reverse() แทนที่ลำดับของอักขระนี้ด้วยรูปแบบที่กลับกัน |
3 | ลบสาธารณะ (int start, int end) ลบอักขระออกจากสตริงย่อยของลำดับนี้ |
4 | การแทรกสาธารณะ (int offset, int i) แทรกการแสดงสตริงของอาร์กิวเมนต์ int ลงในลำดับนี้ |
5 | แทนที่ (int start, int end, String str) แทนที่อักขระในสตริงย่อยของลำดับนี้ด้วยอักขระใน String ที่กำหนด |
วิธีการในรายการต่อไปนี้จะคล้ายกับวิธีการของคลาส String:
หมายเลขซีเรียล | คำอธิบายวิธีการ |
1 | int Capacity() ส่งคืนความจุปัจจุบัน |
2 | ถ่าน charAt(ดัชนี int) ส่งกลับค่า char ที่ดัชนีที่ระบุในลำดับนี้ |
3 | เป็นโมฆะมั่นใจความจุ (int ขั้นต่ำความจุ) ตรวจสอบให้แน่ใจว่าความจุอย่างน้อยเท่ากับขั้นต่ำที่ระบุ |
4 | ถือเป็นโมฆะ getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) คัดลอกอักขระจากลำดับนี้ไปยังอาร์เรย์อักขระเป้าหมาย dst |
5 | int indexOf(String str) ส่งกลับดัชนีของการเกิดขึ้นครั้งแรกของสตริงย่อยที่ระบุในสตริง |
6 | int indexOf(String str, int fromIndex) เริ่มต้นที่ดัชนีที่ระบุ ส่งคืนดัชนีของการเกิดขึ้นครั้งแรกของสตริงย่อยที่ระบุในสตริง |
7 | int LastIndexOf(String str) ส่งกลับดัชนีในสตริงนี้ของการเกิดขึ้นทางขวาสุดของสตริงย่อยที่ระบุ |
8 | int LastIndexOf(String str, int fromIndex) ส่งกลับดัชนีในสตริงนี้ของการเกิดครั้งล่าสุดของสตริงย่อยที่ระบุ |
9 | int length() ส่งกลับความยาวเป็นตัวอักษร |
10 | เป็นโมฆะ setCharAt(int index, char ch) ตั้งค่าอักขระที่ดัชนีที่กำหนดเป็น ch |
11 | เป็นโมฆะ setLength(int newLength) กำหนดความยาวของลำดับอักขระ |
12 | CharSequence subSequence(int start, int end) ส่งกลับลำดับอักขระใหม่ที่เป็นผลสืบเนื่องของลำดับนี้ |
13 | สตริงย่อย (int start) ส่งกลับ String ใหม่ที่มีลำดับอักขระที่มีอยู่ในลำดับอักขระนี้ในปัจจุบัน |
14 | สตริงย่อย (int start, int end) ส่งกลับ String ใหม่ที่มีลำดับย่อยของอักขระที่อยู่ในลำดับนี้ในปัจจุบัน |
15 | String toString() ส่งกลับการแสดงสตริงของข้อมูลในลำดับนี้ |