کلاس StringBuilder

کلاس String می تواند با استفاده از عملگر + دو رشته را به هم متصل کند. اما این عملگر برای الحاق دو رشته مختلف کارا نیست.چون شی رشته در جاوا تغییر ناپذیر است یعنی وقتی که یک متغیر از نوع رشته را تعریف می کنیم مقدار آن تغییر نمی کند.هنگامی که یک رشته را به یک رشته موجود می چسبانید مقدار قبلی حذف و یک شی جدید که شامل دو رشته به هم چسبیده است به وجود می آید.
مثلا

string Animal = "Dog";
Animal = "Cat";
System.out.println(Animal);
Cat

با هر بار انجام این فرایند اشیاء موقتی ایجاد و اشیاء قدیمی از بین می روند و این ایجاد و حذف شدن ها هم زمان برند و هم حافظه را اشغال می کنند. به مثال زیر توجه کنید، مثلا اگر بخواهید همه اعداد 0 تا 9999 را به هم بچسبانید :

int counter = 9999;
String s = "";

for (int i = 0; i <= counter; i++) 
{
   s += i;
}
System.out.println(s);

ممکن است با نگاه کردن به کد متوجه هیچ مشکلی نشوید اما اگر از متد ()currentTimeMillis کلاس System استفاده کنید متوجه می شوید که اجرای این برنامه چقدر زمان می برد. کد بالا را به صورت زیر اصلاح می کنیم :

   1: package myfirstapplication;
   2:     
   3: public class MyFirstApplication 
   4: {
   5:     public static void main(String[] args) 
   6:     {
   7:         int counter = 9999;
   8:         String s = "";
   9:         
  10:         long startTime = System.currentTimeMillis();
  11:         
  12:         for (int i = 0; i <= counter; i++)
  13:         {                                 
  14:            s += i;                        
  15:         }                                 
  16:         
  17:         long endTime   = System.currentTimeMillis();
  18:         long totalTime = endTime - startTime;
  19:         System.out.println(totalTime);
  20:     }   
  21: }

هدف از برنامه بالا تبدیل 1000 عدد به رشته و چسباندن آنها به یکدیگر است. با استفاده از متد ()currentTimeMillis کلاس System که زمان جاری را نشان می دهد یک کرونومتر ایجاد می کنیم که زمان شروع آن قبل از اجرای حلقه for (خط 10) و زمان پایان آن بعد از اتمام حلقه (خط 17) می باشد. به طور میانگین اجرای برنامه بالا 1553 ms زمان می برد (البته ممکن است این زمان در سیستم شما متفاوت باشد). حال اجازه دهید که با استفاده از کلاس StringBuilder این اعداد را به هم وصل کنیم. این کار را با استفاده از متد ()append این کلاس انجام می دهیم.

   1: package myfirstapplication;
   2:     
   3: public class MyFirstApplication 
   4: {
   5:     public static void main(String[] args) 
   6:     {
   7:         int counter = 9999;
   8:         String s = "";
   9:         
  10:         long startTime = System.currentTimeMillis();
  11:         
  12:         StringBuilder sb = new StringBuilder();
  13:                                                
  14:         for (int i = 0; i <= counter; i++)      
  15:         {                                      
  16:            sb.append(i);                       
  17:         }                                      
  18:         
  19:         long endTime   = System.currentTimeMillis();
  20:         long totalTime = endTime - startTime;
  21:         System.out.println(totalTime);
  22:     }   
  23: }

مشاهده می کنید که اجرای برنامه حدود 3ms طول می کشد. همانطور که مشاهده کردید کارایی برنامه به طور چشمگیری بهبود یافت. کارایی برنامه با افزایش متغیر حلقه بیشتر می شود.کلاس StringBuilder برای کار و اتصال رشته های زیاد به هم بسیار قدرتمند است. این کلاس دارای متدهای مختلفی است که در زیر به برخی از آنها اشاره شده است.

متد توضیحات
append() برای چسباندن رشته ها یا کارکترها به رشته جاری به کار می رود.
charAt() یک کاراکتر خاص از یک رشته را بر می گرداند.
delete() برای حذف یک توالی از کاراکترها از رشته اصلی به کار می رود.
getChars() برای کپی یک توالی از کارکترهای یک رشته در یک آرایه کاراکتری به کار می رود.
indexOf() محل های وقوع یک زیر رشته در رشته اصلی را بر می گداند.
insert() برای قرار دادن یک توالی از کاراکترها در یک رشته به کار می رود.
lastIndexOf() آخرین محل وقوع یک زیر رشته در رشته اصلی را بر می گرداند.
length() تعداد کاراکترهای یک رشته را بر می گرداند.
replace() یک توالی از کاراکترها را با توالی دیگر از کاراکترها جایگزین می کند.
reverse() برای معکوس کردن یک رشته به کار می رود.
setCharAt() قرار دادن یک کاراکتر در یک اندیس خاص از رشته
setLength() طول یک توالی از کاراکترها را بر می گرداند.
substring() برای جدا کردن یک توالی از کاراکترها از رشته اصلی به کار می رود.