0Pricing
Java Academy · Ders

Verimli Birleştirme için StringBuilder

Döngüler ve karmaşık biçimlendirme içinde dizeleri verimli biçimde oluşturmak için StringBuilder kullanın.

Verimli Birleştirme için StringBuilder, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.

Verimli Birleştirme için StringBuilder

StringBuilder, metni aşamalı olarak oluşturmak için String'e göre değiştirilebilir bir alternatiftir. Çok sayıda ara String nesnesi oluşturulmasını önler.

StringBuilder ve String Birleştirme Karşılaştırması

Çok sayıda String'i birleştirirken, özellikle döngülerde, StringBuilder yeni nesneler oluşturmak yerine dahili bir karakter arabelleğini değiştirdiği için çok daha hızlıdır.

// 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

StringBuilder API'si

Temel yöntemler: append, insert, delete, replace, reverse, toString, uzunluk, 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

append Çağrılarını Zincirleme

Tüm append ve diğer değiştiren yöntemler this döndürerek akıcı zincirlemeyi mümkün kılar.

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());

Başlangıç Kapasitesi

Dahili dizinin yeniden boyutlandırılmasını önlemek ve büyük String'lerde performansı artırmak için StringBuilder'ı beklenen kapasiteyle önceden boyutlandırın.

// 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 ve Belirli Silme İşlemleri

deleteCharAt tek bir karakteri siler. delete(start, end) bir aralığı siler. Dizi elemanlarının kaydırılması gerektiğinden bu işlemler O(n) maliyetindedir.

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!

CSV Oluşturma

Uygulamalı bir kalıp: StringBuilder ve uygun ayraç işlemesiyle bir CSV satırı oluşturma.

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

Ayraçlarla Ayrılmış Çıktı için StringJoiner

StringJoiner, öğeleri bir ayraçla ve isteğe bağlı ön ek ile son ekle birleştirmeyi basitleştirir; ayraçları elle işlemeniz gerekmez.

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 ve StringBuffer Karşılaştırması

StringBuffer, StringBuilder'ın iş parçacığı açısından güvenli ve eşzamanlı sürümüdür. Kilitleme nedeniyle daha yavaştır. Tek iş parçacıklı bağlamlarda StringBuilder kullanın (durumların %99'unda).

// 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

Ters Çevirme ve Palindrom Denetimi

StringBuilder'ın yerleşik reverse() yöntemi, palindrom denetimini zarif hâle getirir.

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

Gerçek Dünya: SQL Sorgu Oluşturucu

WHERE koşullarının koşullu olarak eklendiği dinamik bir SQL sorgusunu StringBuilder kullanarak oluşturma.

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

Hızlı Kontrol

Döngülerde + ile String birleştirmek neden verimsizdir?

Özet: Verimli Birleştirme için StringBuilder

Temel çıkarımlar:

  • StringBuilder değiştirilebilirdir; append/insert/delete dahili arabelleği değiştirir
  • O(n²) maliyetli String oluşturulmasını önlemek için döngülerde StringBuilder kullanın
  • Tüm değiştiren yöntemler this döndürür; bu da akıcı zincirlemeyi mümkün kılar
  • Dahili yeniden boyutlandırmayı azaltmak için StringBuilder'ı beklenen kapasiteyle önceden boyutlandırın
  • StringJoiner ve String.join, ayraçlarla ayrılmış çıktılar için kullanışlıdır
  • StringBuffer eşzamanlı, yani iş parçacığı açısından güvenli, ancak daha yavaş bir alternatiftir

Sıkça Sorulan Sorular

“Verimli Birleştirme için StringBuilder” dersi ücretsiz mi?

Evet — “Verimli Birleştirme için StringBuilder” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.

“Verimli Birleştirme için StringBuilder” dersinde ne öğreneceğim?

Döngüler ve karmaşık biçimlendirme içinde dizeleri verimli biçimde oluşturmak için StringBuilder kullanın. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Java Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Verimli Birleştirme için StringBuilder” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. String Değişmezliği ve String Havuzu
  2. Verimli Birleştirme için StringBuilder
  3. Metin Blokları ve String.format
  4. Pattern ve Matcher ile Düzenli İfadeler
← Java Academy Sayfasına Dön