Java String immutable – cần tạo chuỗi mới khi chèn.
Cách 1: StringBuilder.append() – Khuyên dùng
public static String prepend(String original, String prefix) {
return new StringBuilder(prefix).append(original).toString();
}
// Sử dụng
String result = prepend("world", "hello "); // "hello world"
Cách 2: Toán tử + (concat) – Đơn giản cho 1 lần
String result = prefix + original;
Cách 3: char[] manual (hiểu bản chất)
public static String prependCharArray(String original, String prefix) {
char[] result = new char[original.length() + prefix.length()];
// copy prefix
for (int i = 0; i < prefix.length(); i++) {
result[i] = prefix.charAt(i);
}
// copy original
for (int i = 0; i < original.length(); i++) {
result[prefix.length() + i] = original.charAt(i);
}
return new String(result);
}
So sánh
| Phương pháp | Độ phức tạp | Hiệu năng | Khuyên dùng |
|---|---|---|---|
| StringBuilder | O(n+m) | Tốt | ✅ Chung |
| + operator | O(n+m) | Tốt (compile-time optimize) | ✅ Đơn giản |
| char[] manual | O(n+m) | Tốt nhất (no intermediate) | Low-level |
| StringBuffer | O(n+m) | Chậm hơn (sync) | Thread-safe |
Ví dụ tương tác
import java.util.Scanner;
public class PrependDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Chuỗi gốc: ");
String s1 = sc.nextLine();
System.out.print("Chuỗi chèn đầu: ");
String s2 = sc.nextLine();
String result = new StringBuilder(s2).append(s1).toString();
System.out.println("Kết quả: " + result);
}
}
Kết quả
Chuỗi gốc: krishna
Chuỗi chèn đầu: kasyap
Kết quả: kasyapkrishna
Lưu ý: Tránh lặp s = prefix + s trong vòng lặp – tạo nhiều object rác. Dùng StringBuilder ngoài vòng lặp.