"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 StringBuilder
aş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
" StringBuilder
Sınıfın iki düzine yardımcı yöntemi var. İşte en önemlileri:
Yöntem | Tanım |
---|---|
|
Geçirilen nesneyi bir dizeye dönüştürür ve onu geçerli dizeye ekler |
|
Geçirilen nesneyi bir dizeye dönüştürür ve geçerli dizenin ortasına ekler |
|
Dizinin start..end aralığı tarafından belirtilen kısmını geçirilen dizeyle değiştirir |
|
Belirtilen dizine sahip karakteri dizeden kaldırır |
|
Belirtilen aralıktaki karakterleri dizeden kaldırır |
|
Geçerli dizede bir alt dize arar |
|
Sondan başlayarak geçerli dizide bir alt dize arar |
|
Geçirilen dizindeki dizedeki karakteri döndürür |
|
Belirtilen aralık tarafından tanımlanan alt dizeyi döndürür |
|
Geçerli dizeyi tersine çevirir. |
|
Belirtilen dizindeki karakteri geçen karaktere değiştirir |
|
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 |
---|---|
|
Hi |
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ı |
---|---|
|
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ı |
---|---|
|
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ı |
---|---|
|
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ı |
---|---|
|
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, StringBuffer
nesneye 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.
GO TO FULL VERSION