CodeGym /وبلاگ جاوا /Random-FA /متد Append() در جاوا: StringBuilder و StringBuffer
John Squirrels
مرحله
San Francisco

متد Append() در جاوا: StringBuilder و StringBuffer

در گروه منتشر شد
append() یک متد جاوا از کلاس های StringBuilder و StringBuffer است که مقداری به یک دنباله فعلی اضافه می کند. حتی اگر نمی‌دانستید متد ()append چیست ، احتمالاً قبلاً به طور ضمنی از آن استفاده کرده‌اید. این زمانی اتفاق افتاد که شما رشته ها را در جاوا با استفاده از عملگر + به هم متصل کردید. نکته این است که الحاق رشته ها در جاوا با استفاده از کلاس StringBuilder یا StringBuffer و متد ()append آنها پیاده سازی می شود .

به طور خلاصه در مورد String، StringBuffer و StringBuilder

همانطور که احتمالا می دانید کلاس String نهایی است (کلاس فرزند ندارد) و تغییرناپذیر است (نمونه هایی از این کلاس پس از ایجاد قابل تغییر نیستند). در واقع به دلیل تغییرناپذیری کلاس String در نتیجه هر عملیات نمونه های رشته جدیدی ایجاد می شود و نمونه های قدیمی دور ریخته می شوند و زباله زیادی تولید می کنند. برای مقابله با تولید زباله های موقت به دلیل تغییرات در شی String، می توانید از کلاس های StringBuffer یا StringBuilder استفاده کنید. تفاوت اصلی بین دو مورد آخر این است که StringBuffer همگام است در حالی که StringBuilder نیست. بنابراین، از StringBuffer برای رشته هایی که اغلب در یک محیط چند رشته ای تغییر می کنند و از StringBuilder در مورد یک محیط تک رشته ای استفاده کنید.متد Append() در جاوا: StringBuilder و StringBuffer - 1

Append() در StringBuilder و StringBuffer

append() یکی از متدهای برتر کلاس های StringBuilder و StringBuffer است. یک مقدار جدید به دنباله فعلی اضافه می کند. در هر دو کلاس StringBuffer و StringBuilder 13 متد append() سربارگذاری شده مختلف وجود دارد . بیایید به روش append برای StringBuilder نگاه کنیم. به هر حال، در مورد StringBuffer دقیقاً یکسان کار می کنند.
  • پیوست عمومی StringBuilder (بولیان)
  • ضمیمه عمومی StringBuilder (char c)
  • عمومی StringBuilder append(char[] str)
  • عمومی StringBuilder append(char[] str، int offset، int len)
  • ضمیمه عمومی StringBuilder (CharSequence cs)
  • ضمیمه عمومی StringBuilder (CharSequence cs، int start، int end)
  • ضمیمه StringBuilder عمومی (double)
  • ضمیمه StringBuilder عمومی (float f)
  • ضمیمه عمومی StringBuilder (int i)
  • ضمیمه StringBuilder عمومی (طولانی lng)
  • عمومی StringBuilder append(Object Obj)
  • عمومی StringBuilder append (String str)
  • عمومی StringBuilder append (StringBuffer sb)
اجازه دهید برخی از آنها را مرور کنیم و با مثال هایی توضیح دهیم که متد ()append دقیقا چه کاری انجام می دهد.

Java.lang.StringBuilder.append(int i)

java.lang.StringBuilder.append(int i) متدی است که اجازه می دهد یک عدد صحیح به یک شی StringBuilder موجود اضافه شود. بیایید نگاهی به مثال های استفاده از Java.lang.StringBuilder.append(int i) بیندازیم :
StringBuilder s = new StringBuilder(I love Java);
int i = 14;
//the method appends StringBuilder and integer
s.append(i);
System.out.println(s);
خروجی در اینجا خواهد بود:
من عاشق جاوا 14 هستم
اینجا چه اتفاقی افتاد؟ ابتدا یک StringBuilder به نام s با مقدار "I love Java" ایجاد کردیم. سپس با استفاده از append(int) یک عدد صحیح 14 به آن اضافه کرد . به طور دقیق، ما نه یک عدد صحیح، بلکه رشته "14" را اضافه کردیم و مقدار StringBuilder به روز شده را به "I love Java 14" دریافت کردیم. بنابراین، متد آرگومان را به یک شی StringBuilder تبدیل می‌کند، آن را به یک شی StringBuilder موجود متصل می‌کند و یک به‌روز شده را برمی‌گرداند.

StringBuilder append() مثال برای Object، int، boolean و آرگومان String

همین داستان با سایر متدهای سربارگذاری شده با عناصر عدد، رشته، کاراکتر یا آرایه خواهد بود. بیایید یک LegoBrick Class و Color enum ایجاد کنیم تا روش عمومی StringBuilder append(Object obj) را نشان دهیم .
//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 +
              '}';
   }
}
حالا بیایید یک کلاس AppendDemo ایجاد کنیم که در آن افزودن یک StringBuilder پایه با String، int، LegoBrick و boolean را نشان می‌دهیم. عجیب به نظر می رسد، اما کار می کند!
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));
   }
}
خروجی این است:
I love I love Java I love Java14 I love Java14LegoBrick{color=RED, isConnected=false} I love Java14LegoBrick{color=RED, isConnected=false}true
ابتدا StringBuilder "I love" را ایجاد و نمایش دادیم، سپس ابتدا با استفاده از متد append() یک String، یک عدد int، یک نمایش رشته ای از یک Object و یک Boolean به صورت متوالی به آن اضافه کردیم.

StringBuilder append(char[] cstr، int set، int length)

بیایید به متد append() با سه پارامتر نگاه کنیم. نمایشی از یک آرایه فرعی از یک آرایه char معین را به رشته اضافه می کند. بنابراین اینجا:
  • cstr آرایه ای از کاراکترها است که باید اضافه شوند
  • آن را شاخص اولین کاراکتر قرار دهید تا اضافه شود
  • طول تعداد کاراکترهایی است که باید اضافه شوند.
مشابه سایر متدهای append() ، این یکی یک شی StringBuilder گسترش یافته را برمی گرداند. در اینجا مثالی از استفاده از append(char[]، cstr، int set، int length) به عنوان بخشی از کد برنامه جاوا آورده شده است.
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);
   }
}
خروجی این است:
من عاشق جاوا هستم

متدهای StringBuilder append() با آرگومان CharSequence

شما ممکن است متوجه دو روش شده باشید که CharSequence را به عنوان آرگومان های خود دارند.
  • ضمیمه عمومی StringBuilder (CharSequence cs)
  • ضمیمه عمومی StringBuilder (CharSequence cs، int start، int end)
همه مبتدیان نمی دانند که CharSequence یک رابط است. طبق مستندات CharSequence توالی خوانایی از مقادیر کاراکتر است و دسترسی یکنواخت و فقط خواندنی به انواع مختلف توالی کاراکترها را فراهم می‌کند. رابط توسط کلاس‌های جاوا مانند String، StringBuffer، StringBuilder و موارد دیگر پیاده‌سازی می‌شود. بنابراین اگر نمی دانید چه چیزی بهتر است در برنامه خود استفاده کنید، String، StringBuffer یا StringBuilder، می توانید از CharSequence استفاده کنید. StringBuilder append (CharSequence cs، int start، int end) تقریباً مانند append(char[] cstr، int set، int length) کار می کند که در بالا در مورد آن صحبت کردیم. با این حال، این روش عنصر اول از دنباله و آخرین عنصر را مشخص می کند. مهم است که به یاد داشته باشید که شروع در زیر دنباله گنجانده شده است، اما پایان نیست (یعنی آخرین عنصر در دنباله بعدی عنصری است که قبل از پایان قرار می گیرد). چرا اینطور است؟ در جاوا همینطور است. بیایید نشان دهیم که CharSequence چیست و متدهای append(CharSequence cs) و append(CharSequence cs، int start، int end) را نشان دهیم .
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);
       }
   }
خروجی این است:
این String است StringBuilder من StringBuilder این StringBuilder است StringBuilder من StringBuilder این رشته است StringBuilder من این StringBuilder است این رشته است
ما دو CharSequence ایجاد کردیم، String و StringBuilder را به آنها متصل کردیم و آنها را چاپ کردیم. ما نمی‌توانیم متد append() را مستقیماً در myStringBuilder اعمال کنیم، زیرا CharSequence این متد را ندارد (اگر دلیل آن را نمی‌دانید، باید در مورد وراثت و همچنین گسترش و محدود کردن انواع مرجع اطلاعاتی کسب کنید). بنابراین، ما یک StringBuilder را با استفاده از متد append به صورت متوالی با هر دو CharSequence ایجاد می کنیم و به هم متصل می کنیم. در پایان ما StringBuilder خود را با دنباله "is" اضافه کردیم ("i" پنجمین عنصر myStringBuilder و s ششمین عنصر است. به یاد داشته باشید که در روش، عنصری که به عنوان end مشخص شده است از دنباله بعدی حذف می شود.

در مورد StringBuffer append() چطور؟

StringBuffer.append همچنین دارای 13 نوع روش است و آنها دقیقاً مانند StringBuilder کار می کنند.
  • ضمیمه عمومی StringBuffer (بولیان)
  • ضمیمه عمومی StringBuffer (charc c)
  • عمومی StringBuffer append​(char[] str)
  • ضمیمه عمومی StringBuffer​(char[] str، int offset، int len)
  • ضمیمه عمومی StringBuffer (دو بار)
  • ضمیمه StringBuffer عمومی (float f)
  • ضمیمه عمومی StringBuffer (int i)
  • ضمیمه عمومی StringBuffer (طولانی lng)
  • ضمیمه عمومی StringBuffer (CharSequence s)
  • ضمیمه عمومی StringBuffer (CharSequence s، int start، int end)
  • الحاق عمومی StringBuffer (Object obj)
  • عمومی StringBuffer ضمیمه (String str)
  • ضمیمه عمومی StringBuffer (StringBuffer sb)
بیایید یک مثال از StringBuffer.append برای پیوستن به یک رشته فرعی داشته باشیم. ما فقط مثال StringBuilder را می گیریم و تمام StringBuilder ها را در کد به StringBuffers تغییر می دهیم.
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);
   }
}
خروجی این است:
من عاشق جاوا هستم من عاشق جاوا 14 هستم
با هر نمونه از این مقاله می توانید این کار را انجام دهید. آنها کار خواهند کرد!

نتیجه

از آنجایی که StringBuilder و StringBuffer اکثر توابع را به اشتراک می گذارند، جای تعجب نیست که هر دو کلاس روش های مشابهی برای استفاده از متد append() دارند . این خبر خوبی برای توسعه دهندگان است - لازم نیست روش های جداگانه ای را برای هر کلاس یاد بگیرید. با این اوصاف، با توجه به انواع روش‌های استفاده از append() ، مطمئن شوید که چند ساعت تمرین اضافه کردن نمایش انواع داده‌های مختلف به یک رشته را انجام داده‌اید.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION