StringBuilder untuk Penggabungan Efisien
Gunakan StringBuilder untuk menyusun string secara efisien di dalam perulangan dan pemformatan kompleks.
StringBuilder untuk Penggabungan Efisien adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
StringBuilder untuk Penggabungan yang Efisien
StringBuilder adalah alternatif String yang dapat diubah untuk menyusun teks secara bertahap. StringBuilder mencegah pembuatan banyak objek String perantara.
StringBuilder vs Penggabungan String
Saat menggabungkan banyak String, terutama dalam perulangan, StringBuilder jauh lebih cepat karena mengubah buffer karakter internal daripada membuat objek baru.
// Inefficient: creates a new String every iteration
String result = "";
for (int i = 0; i < 1000; i++) {
result += i + ","; // 1000 new String objects!
}
// Efficient: StringBuilder uses a resizable char buffer
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
sb.append(i).append(',');
}
String efficient = sb.toString(); // one final String createdAPI StringBuilder
Metode penting: append, insert, delete, replace, reverse, toString, panjang, charAt, setCharAt.
StringBuilder sb = new StringBuilder("Hello");
sb.append(", World"); // Hello, World
sb.insert(5, "!"); // Hello!, World
sb.delete(5, 6); // Hello, World
sb.replace(7, 12, "Java"); // Hello, Java
sb.reverse(); // avaJ ,olleH
sb.reverse(); // Hello, Java
System.out.println(sb); // Hello, Java
System.out.println(sb.length()); // 11
System.out.println(sb.charAt(0)); // HMerangkai Pemanggilan append
Semua metode append dan metode lain yang mengubah objek mengembalikan this, sehingga pemanggilan dapat dirangkai dengan gaya lancar.
StringBuilder html = new StringBuilder()
.append("<div class=\"card\">")
.append("<h2>").append("Product Title").append("</h2>")
.append("<p>Price: $").append(String.format("%.2f", 29.99)).append("</p>")
.append("<button>Add to Cart</button>")
.append("</div>");
System.out.println(html.toString());Kapasitas Awal
Tentukan ukuran awal StringBuilder dengan kapasitas yang diperkirakan agar pengubahan ukuran larik internal dapat dihindari, sehingga kinerja untuk String berukuran besar meningkat.
// Default capacity: 16 chars
StringBuilder small = new StringBuilder();
// Pre-sized: 10 items * ~50 chars each
StringBuilder report = new StringBuilder(500);
for (int i = 1; i <= 10; i++) {
report.append(String.format("%-3d. Record %04d: processed OK%n", i, i));
}
System.out.println(report.toString().substring(0, 30));
// " 1. Record 0001: processed OK"deleteCharAt dan Penghapusan Spesifik
deleteCharAt menghapus satu karakter. delete(start, end) menghapus suatu rentang. Operasi ini memiliki kompleksitas O(n) karena elemen larik harus digeser.
StringBuilder sb = new StringBuilder("Hello, World!");
sb.deleteCharAt(5); // removes comma: "Hello World!"
sb.delete(5, 6); // removes space: "HelloWorld!"
System.out.println(sb); // HelloWorld!
// Replace to fix a typo
StringBuilder typo = new StringBuilder("Helo, Java!");
typo.replace(typo.indexOf("Helo"), typo.indexOf("Helo") + 4, "Hello");
System.out.println(typo); // Hello, Java!Membangun CSV
Pola praktis: membangun baris CSV dengan StringBuilder dan menangani pemisah dengan benar.
import java.util.List;
static String toCsv(List<String> values) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < values.size(); i++) {
if (i > 0) sb.append(',');
sb.append(escapeCsv(values.get(i)));
}
return sb.toString();
}
static String escapeCsv(String s) {
if (s.contains(",") || s.contains("\""))
return "\"" + s.replace("\"", "\"\"") + "\"";
return s;
}
System.out.println(toCsv(List.of("Alice", "Smith, Jr.", "30")));
// Alice,"Smith, Jr.",30StringJoiner untuk Keluaran yang Dipisahkan Pembatas
StringJoiner menyederhanakan penggabungan elemen dengan pembatas, awalan, dan akhiran opsional—tanpa perlu menangani pemisah secara manual.
import java.util.StringJoiner;
StringJoiner sj = new StringJoiner(", ", "[", "]");
sj.add("Alice");
sj.add("Bob");
sj.add("Charlie");
System.out.println(sj.toString()); // [Alice, Bob, Charlie]
// Equivalent with String.join
String joined = String.join(", ", "Alice", "Bob", "Charlie");
System.out.println(joined); // Alice, Bob, Charlie
// Streams: collect with joining collector
import java.util.stream.*;
List.of("a", "b", "c").stream()
.collect(Collectors.joining(", ", "(", ")"));
// (a, b, c)StringBuilder vs StringBuffer
StringBuffer adalah versi StringBuilder yang aman untuk thread dan disinkronkan. StringBuffer lebih lambat karena penguncian. Gunakan StringBuilder dalam konteks satu thread, yaitu pada 99% kasus.
// StringBuffer: thread-safe but slower (synchronized methods)
StringBuffer buf = new StringBuffer();
buf.append("Thread-safe");
buf.append(" but slow");
// StringBuilder: not thread-safe but faster
StringBuilder sb = new StringBuilder();
sb.append("Fast");
sb.append(" single-threaded");
// When to use StringBuffer:
// - Multiple threads write to the same buffer
// - Almost always a design smell — redesign to avoid sharingMembalik dan Memeriksa Palindrom
reverse() bawaan StringBuilder membuat pemeriksaan palindrom menjadi sederhana dan elegan.
static boolean isPalindrome(String s) {
String cleaned = s.toLowerCase()
.replaceAll("[^a-z0-9]", ""); // remove non-alphanumeric
String reversed = new StringBuilder(cleaned).reverse().toString();
return cleaned.equals(reversed);
}
System.out.println(isPalindrome("A man, a plan, a canal: Panama")); // true
System.out.println(isPalindrome("race a car")); // false
System.out.println(isPalindrome("Was it a car or a cat I saw?")); // trueDunia Nyata: Pembuat Kueri SQL
Membangun kueri SQL dinamis menggunakan StringBuilder, dengan klausa yang ditambahkan secara bersyarat.
static String buildQuery(String category, Double minPrice, Double maxPrice) {
StringBuilder sql = new StringBuilder("SELECT * FROM products WHERE 1=1");
if (category != null)
sql.append(" AND category = '" + category + "'");
if (minPrice != null)
sql.append(" AND price >= ").append(minPrice);
if (maxPrice != null)
sql.append(" AND price <= ").append(maxPrice);
sql.append(" ORDER BY name");
return sql.toString();
}
System.out.println(buildQuery("Electronics", 50.0, null));
// SELECT * FROM products WHERE 1=1 AND category = 'Electronics' AND price >= 50.0 ORDER BY namePemeriksaan Singkat
Mengapa penggabungan String dengan + tidak efisien dalam perulangan?
Rangkuman: StringBuilder untuk Penggabungan yang Efisien
Hal-hal penting:
- StringBuilder dapat diubah—append, insert, dan delete mengubah buffer internal
- Gunakan StringBuilder dalam perulangan untuk menghindari pembuatan String dengan kompleksitas O(n²)
- Semua metode yang mengubah objek mengembalikan this, sehingga pemanggilan dapat dirangkai dengan gaya lancar
- Tentukan ukuran awal StringBuilder dengan kapasitas yang diperkirakan untuk mengurangi pengubahan ukuran internal
- StringJoiner dan String.join praktis digunakan untuk keluaran yang dipisahkan pembatas
- StringBuffer adalah alternatif yang disinkronkan dan aman untuk thread, tetapi lebih lambat
Pertanyaan yang Sering Diajukan
Apakah pelajaran “StringBuilder untuk Penggabungan Efisien” gratis?
Ya — teks lengkap “StringBuilder untuk Penggabungan Efisien” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “StringBuilder untuk Penggabungan Efisien”?
Gunakan StringBuilder untuk menyusun string secara efisien di dalam perulangan dan pemformatan kompleks. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “StringBuilder untuk Penggabungan Efisien” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Imutabilitas String dan String Pool
- StringBuilder untuk Penggabungan Efisien
- Blok Teks dan String.format
- Ekspresi Reguler dengan Pattern dan Matcher