CodeGym /Java Blogu /Rastgele /Java'da Append() Yöntemi: StringBuilder ve StringBuffer
John Squirrels
Seviye
San Francisco

Java'da Append() Yöntemi: StringBuilder ve StringBuffer

grupta yayınlandı
append(), geçerli bir diziye bazı değerler ekleyen StringBuilder ve StringBuffer sınıflarının bir Java yöntemidir. append() yönteminin ne olduğunu bilmiyor olsanız bile , muhtemelen onu önceden dolaylı olarak kullanmışsınızdır. Bu, + operatörünü kullanarak Java'da Dizeleri birleştirdiğinizde oldu. Buradaki nokta, Java'da String birleştirmenin StringBuilder veya StringBuffer sınıfı ve onların append() yöntemi kullanılarak uygulanmasıdır .

String, StringBuffer ve StringBuilder Hakkında Çok Kısaca

Muhtemelen bildiğiniz gibi, String sınıfı nihaidir (alt sınıfı yoktur) ve değişmezdir (bu sınıfın örnekleri oluşturulduktan sonra değiştirilemez). Aslında, String sınıfının değişmezliği nedeniyle, her işlemin sonucu olarak yeni dize örnekleri oluşturulur ve eskileri atılarak çok fazla çöp üretilir. String nesnesinde yapılan değişiklikler nedeniyle oluşan geçici çöplerle başa çıkmak için StringBuffer veya StringBuilder sınıflarını kullanabilirsiniz. Son ikisi arasındaki temel fark, StringBuilder değilken StringBuffer'ın Senkronize edilmiş olmasıdır. Bu nedenle, çok iş parçacıklı bir ortamda sık sık değiştirilecek dizeler için StringBuffer'ı ve tek iş parçacıklı bir ortamda olması durumunda StringBuilder'ı kullanın.Java'da Append() Yöntemi: StringBuilder ve StringBuffer - 1

StringBuilder ve StringBuffer'da Append()

append(), StringBuilder ve StringBuffer sınıflarının en önemli yöntemlerinden biridir. Geçerli diziye yeni bir değer ekler. Hem StringBuffer hem de StringBuilder sınıflarında 13 farklı aşırı yüklenmiş append() yöntemi vardır . StringBuilder için ekleme yöntemine bakalım. Her neyse, StringBuffer durumunda tamamen aynı şekilde çalışırlar.
  • genel StringBuilder ekleme(boolean b)
  • genel StringBuilder ekleme(char c)
  • genel StringBuilder append(char[] str)
  • genel StringBuilder append(char[] str, int offset, int len)
  • genel StringBuilder ekleme (CharSequence cs)
  • genel StringBuilder ekleme (CharSequence cs, int başlangıç, int bitiş)
  • genel StringBuilder ekleme (çift d)
  • genel StringBuilder ekleme(float f)
  • genel StringBuilder ekleme(int i)
  • genel StringBuilder eklemesi (uzun lng)
  • genel StringBuilder ekleme (Nesne nesnesi)
  • genel StringBuilder ekleme(String str)
  • genel StringBuilder ekleme(StringBuffer sb)
Bazılarının üzerinden geçelim ve append() yönteminin tam olarak ne yaptığını örneklerle açıklayalım.

Java.lang.StringBuilder.append(int i)

java.lang.StringBuilder.append(int i), varolan bir StringBuilder nesnesine bir tamsayı eklemeye izin veren bir yöntemdir. Java.lang.StringBuilder.append(int i) kullanım örneklerine bir göz atalım :

StringBuilder s = new StringBuilder(“I love Java ”);  
int i = 14;
//the method appends StringBuilder and integer   
s.append(i); 
System.out.println(s); 
Buradaki çıktı şöyle olacaktır:
Java 14'ü seviyorum
Burada ne oldu? İlk olarak, "I love Java" değerine sahip s adında bir StringBuilder oluşturduk. Ardından , append(int) kullanarak ona bir tamsayı 14 eklendi . Açıkçası, bir tamsayı değil, "14" dizesini ekledik ve "Java 14'ü seviyorum" olarak güncellenmiş bir StringBuilder değeri aldık. Böylece, yöntem argümanı bir StringBuilder nesnesine dönüştürür, varolan bir StringBuilder nesnesine bağlar ve güncellenmiş bir tane döndürür.

Nesne, int, boolean ve String argümanı için StringBuilder append() örneği

Aynı hikaye, sayı, dizi, char veya dizi elemanları ile diğer tüm aşırı yüklenmiş yöntemlerle olacaktır. Herkese açık StringBuilder append(Object obj) yöntemini göstermek için bir LegoBrick Sınıfı ve Renk sıralaması oluşturalım .

//enum with colors 
 public enum Color {
   RED, YELLOW, BLUE;
}
//LegoBrick Class code 
public class LegoBrick {
   Color color;
   boolean isConnected;

   public void connect() {
       System.out.println("This brick is connected");
       this.isConnected = true;
   }

   public void disconnect() {
       System.out.println("Disconnected");
       isConnected = false;
   }

   public LegoBrick(Color color, boolean isConnected) {
       this.color = color;
       this.isConnected = isConnected;
   }

   public Color getColor() {
       return color;
   }

   public boolean isConnected() {
       return isConnected;
   }

   @Override
   public String toString() {
       return "LegoBrick{" +
              "color=" + color +
              ", isConnected=" + isConnected +
              '}';
   }
}
Şimdi temel bir StringBuilder'ın String, int, LegoBrick ve boolean ile eklendiğini göstereceğimiz bir AppendDemo Sınıfı oluşturalım. Kulağa garip geliyor ama işe yarıyor!

public class AppendDemo {

   public static void main(String[] args) {
       StringBuilder s = new StringBuilder("I love");
System.out.println(s)
//the method appends StringBuilder and String
       s.append(" Java");
       System.out.println(s);
//the method appends StringBuilder and int
       s.append(14);
       System.out.println(s);
       LegoBrick legoBrick = new LegoBrick(Color.RED, false);
//the method appends StringBuilder and LegoBrick 
       s.append(legoBrick);
       System.out.println(s);
//the method appends StringBuilder and boolean
       System.out.println(s.append(5<7));
   }
}
Çıktı:
Java'yı seviyorum Java14'ü seviyorum Java14LegoBrick'i seviyorum{color=RED, isConnected=false} Java14LegoBrick'i seviyorum{color=RED, isConnected=false}true
İlk olarak, StringBuilder "Seviyorum" öğesini oluşturduk ve gösterdik, ardından İlk olarak, append() yöntemini kullanarak ona sırayla bir String, bir int numarası, bir Nesnenin String temsili ve bir boole ekledik.

StringBuilder append(char[] cstr, int set, int uzunluk)

Üç parametreli append() yöntemine bakalım . Dizeye belirli bir karakter dizisinin bir alt dizisinin temsilini ekler. Yani burada:
  • cstr , eklenecek bir karakter dizisidir
  • eklenecek ilk karakterin dizinini ayarlayın
  • uzunluk, eklenecek karakter miktarıdır.
Diğer append() yöntemlerine benzer şekilde , bu da genişletilmiş bir StringBuilder nesnesi döndürür. Java uygulama kodunun bir parçası olarak append(char[], cstr, int set, int length) kullanımına bir örnek .

public class AppendDemo {
   // an example of using append(char[], cStr, int set, int length)

   public static void main(String[] args) {
       StringBuilder s = new StringBuilder("I love ");
      //here is a char's array, part of which we are going to append to s
       char[] cStr = new char[]
               {'c', 'o', 'd', 'e', 'J', 'a', 'v', 'a', '1', '4'};
       //we append 4 elements of cStr from the 4th element "J"
       s.append(cStr, 4, 4);
       System.out.println(s);
   }
}
Çıktı:
Java'yı seviyorum

CharSequence bağımsız değişkenli StringBuilder append() yöntemleri

Bağımsız değişkenleri CharSequence olan iki yöntem fark etmiş olabilirsiniz.
  • genel StringBuilder ekleme (CharSequence cs)
  • genel StringBuilder ekleme (CharSequence cs, int başlangıç, int bitiş)
Yeni başlayanların tümü CharSequence'ın bir Arayüz olduğunu bilmez. Belgelere göre CharSequence, okunabilir bir char değerleri dizisidir ve birçok farklı char dizisine tek tip, salt okunur erişim sağlar. Arayüz, String, StringBuffer, StringBuilder ve daha fazlası gibi Java Sınıfları tarafından uygulanır. Dolayısıyla, programınızda, String, StringBuffer veya StringBuilder'da neyin daha iyi kullanılacağını bilmiyorsanız, CharSequence'ı kullanabilirsiniz. StringBuilder append(CharSequence cs, int start, int end) neredeyse append(char[] cstr, int set, int length) gibi çalışıryukarıda tartıştık. Bununla birlikte, bu yöntem, alt dizinin ilk öğesini ve son öğesini belirtir. Start'ın alt diziye dahil olduğunu ancak end'in dahil olmadığını (yani, alt dizideki son öğe, end'den önce gelen öğedir) hatırlamak önemlidir. Nedenmiş? Java'da olduğu gibi. CharSequence'in ne olduğunu ve append(CharSequence cs) ve append(CharSequence cs, int start, int end) metodlarını gösterelim .

public class CharSequenceDemo {

   public static void printCharSequence(CharSequence ch) {
       System.out.println(ch);
   }
       public static void main(String[] args) {
           CharSequence myString = new String("This is String ");
           printCharSequence(myString);
           CharSequence myStringBuilder = new StringBuilder("This is StringBuilder ");
           printCharSequence(myStringBuilder);
           StringBuilder s = new StringBuilder("my StringBuilder ");
//StringBuilder.append           
s.append(myStringBuilder);
           System.out.println(s);
//StringBuilder.append
           s.append(myString);
           System.out.println(s);
           s.append(myString, 5,7);
           System.out.println(s);
       }
   }
Çıktı:
Bu String Bu, StringBuilder'ım StringBuilder'ım Bu StringBuilder'ım StringBuilder'ım Bu StringBuilder'ım Bu String benim StringBuilder'ım Bu StringBuilder'ım Bu String
İki CharSequences oluşturduk, String ve StringBuilder'ı onlara bağladık ve yazdırdık. Append() yöntemini doğrudan myStringBuilder'a uygulayamayız , çünkü CharSequence'da bu yöntem yoktur (nedenini anlamadıysanız, referans türlerinin genişletilmesi ve daraltılmasının yanı sıra kalıtım hakkında da bilgi sahibi olmanız gerekir). Bu nedenle, bir StringBuilder oluştururuz ve her iki CharSequence ile sırayla append yöntemini kullanarak birleştiririz. Sonunda StringBuilder'ımıza “is” alt dizisini ekledik (“i”, myStringBuilder'ın 5. öğesidir ve s 6. öğedir. Yöntemde, end olarak belirtilen öğenin alt diziden çıkarıldığını unutmayın.

Peki ya StringBuffer append()?

StringBuffer.append ayrıca yöntemin 13 çeşidine sahiptir ve bunlar StringBuilder ile tamamen aynı şekilde çalışır.
  • genel StringBuffer eki​(boolean b)
  • genel StringBuffer eki​(char c)
  • genel StringBuffer ekleme​(char[] str)
  • genel StringBuffer ekleme​(char[] str, int ofset, int len)
  • public StringBuffer ekleme​(çift d)
  • public StringBuffer ekleme​(float f)
  • genel StringBuffer eki​(int i)
  • public StringBuffer ekleme​(uzun lng)
  • genel StringBuffer ekleme​(CharSequence s)
  • genel StringBuffer ekleme​(CharSequence s, int başlangıç, int bitiş)
  • public StringBuffer ekleme​(Nesne nesnesi)
  • genel StringBuffer ekleme​(String str)
  • genel StringBuffer eki​(StringBuffer sb)
Bir alt dizeye katılmak için StringBuffer.append örneğine bakalım . Sadece StringBuilder örneğini alıyoruz ve koddaki tüm StringBuilder'ları StringBuffers olarak değiştiriyoruz.

public class AppendDemo {
   // an example of using append(char[], cStr, int set, int length)

   public static void main(String[] args) {
       StringBuffer s = new StringBuffer("I love ");
      //here is a char's array, part of which we are going to append to s
       char[] cStr = new char[]
               {'c', 'o', 'd', 'e', 'J', 'a', 'v', 'a', '1', '4'};
       //we append 4 elements of cStr from the 4th element "J"
//with StringBuffer.append
       s.append(cStr, 4, 4);
       System.out.println(s);
//StringBuffer.append adds int 14 to s
s.append(14); 
System.out.println(s);
   }
}
Çıktı:
Java'yı seviyorum Java14'ü seviyorum
Bunu, bu makaledeki her örnekle yapabilirsiniz. Onlar çalışacak!

Çözüm

StringBuilder ve StringBuffer çoğu işlevi paylaştığından, her iki sınıfın da append() yöntemini kullanmak için benzer yollara sahip olması şaşırtıcı değildir . Bu, geliştiriciler için iyi bir haber; her sınıf için ayrı yöntemler öğrenmek zorunda değilsiniz. Append() kullanmanın çeşitli yollarını göz önünde bulundurarak , farklı veri türlerinin temsillerini bir dizgeye ekleyerek birkaç saat pratik yaptığınızdan emin olun.
Yorumlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION