0Pricing
Java Academy · Pelajaran

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 created

API 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)); // H

Merangkai 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.",30

StringJoiner 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 sharing

Membalik 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?"));    // true

Dunia 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 name

Pemeriksaan 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

  1. Imutabilitas String dan String Pool
  2. StringBuilder untuk Penggabungan Efisien
  3. Blok Teks dan String.format
  4. Ekspresi Reguler dengan Pattern dan Matcher
← Kembali ke Java Academy