Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธีผสาน (Concatenate) สตริงใน Java

String ใน Java ใช้เก็บลำดับตัวอักษร เป็น object ของคลาส java.lang.String สร้างได้ 2 แบบ:


String strObj = new String("Hello");      // new keyword
String strLit = "Welcome";                 // string literal

วิธีการ Concatenate Strings

1. ใช้ตัวดำเนินการ + (Simple)


String str1 = "Krishna";
String str2 = "Kasyap";
String result = str1 + str2; // "KrishnaKasyap"

2. ใช้ concat() method


String result = str1.concat(str2); // "KrishnaKasyap"

3. ใช้ StringBuilder (แนะนำสำหรับ Loop/Performance)


StringBuilder sb = new StringBuilder(str1);
sb.append(str2);
String result = sb.toString();

4. ใช้ StringBuffer (Thread-safe version)


StringBuffer sb = new StringBuffer(str1);
sb.append(str2);
String result = sb.toString();

ตัวอย่างโค้ดครบถ้วน


import java.util.Scanner;

public class StringConcatenation {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter first string: ");
        String str1 = sc.next();
        System.out.println("Enter second string: ");
        String str2 = sc.next();
        
        // ทุกวิธีให้ผลลัพธ์เหมือนกัน
        System.out.println("+ operator: " + (str1 + str2));
        System.out.println("concat(): " + str1.concat(str2));
        System.out.println("StringBuilder: " + new StringBuilder(str1).append(str2));
        System.out.println("StringBuffer: " + new StringBuffer(str1).append(str2));
    }
}

ผลลัพธ์


Enter first string: Krishna
Enter second string: Kasyap
+ operator: KrishnaKasyap
concat(): KrishnaKasyap
StringBuilder: KrishnaKasyap
StringBuffer: KrishnaKasyap

การเปรียบเทียบประสิทธิภาพ

วิธีPerformanceThread-Safeใช้เมื่อไหร่
+ operatorดี (compiler optimize เป็น StringBuilder)N/AStatement เดียว, ไม่ได้อยู่ใน loop
concat()พอใช้N/Aต่อ 2 string เท่านั้น
StringBuilderดีที่สุดไม่Loop, หลายครั้ง, single-thread
StringBufferดีใช่Multi-thread environment

Best Practices

  • ใน Loop: สร้าง StringBuilder นอก loop, append ใน loop, toString() หลัง loop
  • หลาย String: String.join(delimiter, str1, str2, str3) (Java 8+)
  • String.format(): สำหรับ template ที่ซับซ้อน
  • ไม่ทำ: s += "something" ใน loop (สร้าง object ใหม่ทุก iteration)

ตัวอย่าง Anti-pattern vs Best Practice


// ❌ Bad: สร้าง object ใหม่ทุก loop
String result = "";
for (int i = 0; i < 1000; i++) {
    result += i; // ช้า มาก!
}

// ✅ Good: StringBuilder
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
    sb.append(i);
}
String result = sb.toString(); // เร็วมาก