1. การปรับเปลี่ยนสตริง

ใน Java สตริงเป็นวัตถุที่ไม่เปลี่ยนรูปแบบ สิ่งนี้ทำขึ้นเพื่อทำให้คลาส String ได้รับการปรับให้เหมาะสมที่สุดและเพื่อให้สามารถใช้งานได้ทุกที่ ตัวอย่างเช่น แนะนำให้ใช้เฉพาะประเภทที่ไม่เปลี่ยน รูปแบบเป็นคีย์ในคอลเล็กชัน HashMap

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

สมมติว่าเรามีสตริงขนาดใหญ่มากและเราต้องเพิ่มบางสิ่งที่ส่วนท้ายของสตริงบ่อยๆ ในกรณีนี้ แม้แต่ชุดของอักขระ ( ArrayList<Character>) ก็สามารถมีประสิทธิภาพมากกว่าการสร้างและต่อออบเจกต์สตริงใหม่อย่างต่อเนื่อง

นั่นเป็นเหตุผลว่าทำไมจึงมีการเพิ่มประเภทที่เหมือนสตริงที่สามารถเปลี่ยนแปลงได้ในภาษา Java เรียกว่าStringBuilder.

การสร้างวัตถุ

หากต้องการสร้างStringBuilderวัตถุตามสตริงที่มีอยู่ คุณต้องใช้คำสั่งเช่น:

StringBuilder name = new StringBuilder(string);

หากต้องการสร้างสตริงที่ไม่แน่นอนที่ว่างเปล่า คุณต้องใช้คำสั่งดังนี้:

StringBuilder name = new StringBuilder();

รายการวิธีการ

ชั้น เรียนStringBuilderมีวิธีที่เป็นประโยชน์สองโหล นี่คือสิ่งที่สำคัญที่สุด:

วิธี คำอธิบาย
StringBuilder append(obj)
แปลงออบเจกต์ที่ผ่านเป็นสตริงแล้วผนวกเข้ากับสตริงปัจจุบัน
StringBuilder insert(int index, obj)
แปลงออบเจกต์ที่ผ่านเป็นสตริงและแทรกลงในสตริงปัจจุบัน
StringBuilder replace(int start, int end, String str)
แทนที่ส่วนของสตริงที่ระบุโดยช่วง start..end ด้วยสตริงที่ผ่าน
StringBuilder deleteCharAt(int index)
ลบอักขระที่มีดัชนีที่ระบุออกจากสตริง
StringBuilder delete(int start, int end)
ลบอักขระภายในช่วงเวลาที่กำหนดออกจากสตริง
int indexOf(String str, int index)
ค้นหาสตริงย่อยในสตริงปัจจุบัน
int lastIndexOf(String str, int index)
ค้นหาสตริงย่อยในสตริงปัจจุบัน โดยเริ่มจากจุดสิ้นสุด
char charAt(int index)
ส่งกลับอักขระในสตริงที่ดัชนีที่ผ่าน
String substring(int start, int end)
ส่งกลับสตริงย่อยที่กำหนดโดยช่วงเวลาที่ระบุ
StringBuilder reverse()
ย้อนกลับสตริงปัจจุบัน
void setCharAt(int index, char)
เปลี่ยนอักขระที่ดัชนีที่ระบุเป็นอักขระที่ผ่าน
int length()
ส่งกลับความยาวของสตริงเป็นตัวอักษร

นี่คือคำอธิบายสั้น ๆ ของแต่ละวิธี


2. คำอธิบายของวิธีการ:

ต่อท้ายสตริง

หากต้องการเพิ่มบางสิ่งในสตริงที่ไม่แน่นอน ( StringBuilder) ให้ใช้append()เมธอด ตัวอย่าง:

รหัส คำอธิบาย
StringBuilder builder = new StringBuilder("Hi");
builder.append("Bye");
builder.append(123);
Hi
HiBye
HiBye123

แปลงเป็นสตริงมาตรฐาน

ในการแปลงStringBuilderอ็อบเจกต์เป็นอ็อบเจกต์ String คุณต้องเรียกใช้toString()เมธอด ของมัน ตัวอย่าง

รหัส เอาต์พุต
StringBuilder builder = new StringBuilder("Hi");
builder.append(123);
String result = builder.toString();
System.out.println(result);
Hi123

ฉันจะลบตัวละครได้อย่างไร?

หากต้องการลบอักขระในสตริงที่ไม่แน่นอน คุณต้องใช้deleteCharAt()วิธีการ ตัวอย่าง:

รหัส เอาต์พุต
StringBuilder builder = new StringBuilder("Hello");
builder.deleteCharAt(2);
String result = builder.toString();
System.out.println(result);
Helo

ฉันจะแทนที่ส่วนหนึ่งของสตริงด้วยสตริงอื่นได้อย่างไร

สำหรับสิ่งนี้มีreplace(int begin, int end, String str)วิธีการ ตัวอย่าง:

รหัส เอาต์พุต
StringBuilder builder = new StringBuilder("Mellow");
builder.replace(2, 5, "Hello!");
String result = builder.toString();
System.out.println(result);
MeHello!w


3. ตัวอย่างที่เป็นประโยชน์ของการทำงานกับสตริง

ฉันจะย้อนกลับสตริงได้อย่างไร

มีวิธีพิเศษในการทำเช่นนี้ — reverse(); ตัวอย่าง:

รหัส เอาต์พุต
String str = "Hello";
StringBuilder builder = new StringBuilder(str);
builder.reverse();
String result = builder.toString();
System.out.println(result);
olleH

StringBufferระดับ

มีอีกคลาสหนึ่ง — StringBuffer ซึ่งเป็นอะนาล็อกของStringBuilderคลาส แต่วิธีการของมันจะถูกทำเครื่องหมายด้วยตัวsynchronizedดัดแปลง หมายความว่าStringBufferสามารถเข้าถึงวัตถุได้พร้อมกันจากหลายเธรด

แต่ช้ากว่าStringBuilderมาก คุณอาจต้องใช้คลาสนี้เมื่อคุณเริ่มสำรวจมัลติเธรดในภารกิจJava Multithreading