"Selamlar, Amigo!"

"Merhaba Rishi!"

"Artık stringler hakkında ilginç bir şeyler öğrenecek kadar bilgin var. Daha spesifik olarak, String sınıfına benzeyen ama tam olarak aynı olmayan yeni bir sınıf."

"Kulağa ilgi çekici geliyor, ancak sıradan dizilerin nasıl yetersiz kaldığı ve diğer dizi benzeri sınıflara neden ihtiyaç duyulduğu benim için tamamen açık değil."

"Dizelerin Java'da değişmez nesneler olduğu gerçeğiyle başlayalım."

"Nasıl yani? Unuttum... Ya da hiç bilemedim..."

"Değişmez nesnelerin, oluşturulduktan sonra durumları değiştirilemeyen nesneler olduğunu hatırlatmama izin verin."

"Ahhh... Java'da dizeler neden değişmez?"

"Bu, String sınıfını yüksek düzeyde optimize etmek ve her yerde kullanılmasına izin vermek için yapıldı. Örneğin, HashMap koleksiyonunda anahtar olarak yalnızca değişmez türlerin kullanılması önerilir .

"Ancak, programcıların String sınıfının değişken olmasını daha uygun buldukları durumlar sıklıkla ortaya çıkar. Yöntemlerinden biri her çağrıldığında yeni bir alt dize oluşturmayan bir sınıf isterler."

"Ama ne işe yarar?"

"Pekala, çok büyük bir dizimiz olduğunu ve sonuna sık sık bir şeyler eklememiz gerektiğini varsayalım. Bu durumda, bir karakter koleksiyonu ( ArrayList<Character>) bile, String nesnelerini sürekli olarak yeniden oluşturup birleştirmekten daha verimli olabilir."

"İşte bu yüzden tam olarak String sınıfı olmayan dizilere ihtiyacımız var?"

"Kesinlikle. Java dili, değiştirilebilen String benzeri bir tür ekledi. Adı StringBuilder".

nesne oluşturma

"Mevcut bir dizeye dayalı bir nesne oluşturmak için StringBuilderaşağıdaki gibi bir ifade yürütmeniz gerekir:

StringBuilder name = new StringBuilder(string);

"Boş bir değiştirilebilir dize oluşturmak için şöyle bir ifade kullanmanız gerekir:

StringBuilder name = new StringBuilder();

yöntemlerin listesi

" StringBuilderSınıfın iki düzine yardımcı yöntemi var. İşte en önemlileri:

Yöntem Tanım
StringBuilder append(obj)
Geçirilen nesneyi bir dizeye dönüştürür ve onu geçerli dizeye ekler
StringBuilder insert(int index, obj)
Geçirilen nesneyi bir dizeye dönüştürür ve geçerli dizenin ortasına ekler
StringBuilder replace(int start, int end, String str)
Dizinin start..end aralığı tarafından belirtilen kısmını geçirilen dizeyle değiştirir
StringBuilder deleteCharAt(int index)
Belirtilen dizine sahip karakteri dizeden kaldırır
StringBuilder delete(int start, int end)
Belirtilen aralıktaki karakterleri dizeden kaldırır
int indexOf(String str, int index)
Geçerli dizede bir alt dize arar
int lastIndexOf(String str, int index)
Sondan başlayarak geçerli dizide bir alt dize arar
char charAt(int index)
Geçirilen dizindeki dizedeki karakteri döndürür
String substring(int start, int end)
Belirtilen aralık tarafından tanımlanan alt dizeyi döndürür
StringBuilder reverse()
Geçerli dizeyi tersine çevirir.
void setCharAt(int index, char)
Belirtilen dizindeki karakteri geçen karaktere değiştirir
int length()
Karakter dizisinin uzunluğunu döndürür

"Şimdi size bu yöntemlerin her birini kısaca anlatacağım.

Bir dizeye ekleme

"Değişken bir dizeye ( StringBuilder) bir şey eklemek için append()yöntemi kullanın. Örnek:

kod Tanım
StringBuilder builder = new StringBuilder("Hi");
builder.append("Bye");
builder.append(123);
Hi
HiBye
HiBye123

Standart bir diziye dönüştürme

"Bir nesneyi String nesnesine dönüştürmek için StringBuilder, onun yöntemini çağırmanız yeterlidir toString(). Örnek

kod Çıktı
StringBuilder builder = new StringBuilder("Hi");
builder.append(123);
String result = builder.toString();
System.out.println(result);
Hi123

Bir karakteri nasıl silerim?

"Değişebilir bir dizideki bir karakteri silmek için, yöntemi kullanmanız gerekir deleteCharAt(). Örnek:

kod Çıktı
StringBuilder builder = new StringBuilder("Hello");
builder.deleteCharAt(2);
String result = builder.toString();
System.out.println(result);
Helo

Bir dizenin bir kısmını başka bir dizeyle nasıl değiştiririm?

"Bunun için bir yöntem var replace(int begin, int end, String str). Örnek:

kod Çıktı
StringBuilder builder = new StringBuilder("Mellow");
builder.replace(2, 5, "Hello!");
String result = builder.toString();
System.out.println(result);
MeHello

"Kulağa uygun geliyor. Teşekkürler, Rishi."

"Bahsetme. Buna ne dersin, ipi ters çevirir misin? Nasıl yaparsın?"

StringBuilder"Pekala... Bir , içine bir dizi koyardım... Sonra yeni bir dizi yaratırdım ve son karakterden ilkine bir döngüde... Ya da belki biraz kaydırma ...

"Fena değil. Ama daha hızlı olabilirdi. Bunu yapmanın özel bir yöntemi var - reverse();Örnek:

kod Çıktı
String str = "Hello";
StringBuilder builder = new StringBuilder(str);
builder.reverse();
String result = builder.toString();
System.out.println(result);
olleH

"Sınıfın yanı sıra StringBuilder, Java'nın sicim benzeri başka bir sınıfı daha var StringBuffer. Bu, sınıfın bir benzeridir StringBuilder, ancak yöntemleri değiştirici ile işaretlenmiştir synchronized."

"Bu ne anlama gelir?"

"Bu, StringBuffernesneye aynı anda birden çok iş parçacığından erişilebileceği anlamına gelir."

"Henüz ileti dizilerine pek aşina değilim. Ancak 'birden çok ileti dizisinden erişilebilir' ifadesi, 'birden çok ileti dizisinden erişilemez' ifadesinden açıkça daha iyidir... O zaman neden her zaman kullanmıyorsunuz? StringBuffer"

"Çünkü . Java MultithreadingStringBuilder arayışında multithreading'i aktif olarak keşfetmeye başladığınızda böyle bir sınıfa ihtiyacınız olabilir .

"Unutmamak için bunu hafızama yazacağım. 'Gelecek için' işaretlendi.