آموزش StringBuilder در برنامه نویسی اندروید
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش StringBuilder در برنامه نویسی اندروید می پردازیم در ادامه با ما همراه باشید. stringbuilder یک نوع object از string است که قابل ویرایش است و همانند یک آرایه از اجزا می باشد در ادامه با ما همراه باشید.
چرا باید از StringBuilder استفاده کنیم ؟
به کد زیر نگاه کنید.
1 2 3 4 | String s = ""; for (int i = 0; i < 100; i++) { s += ", " + i; } |
در بالا از یک حلقه for برای قرار دادن عدد 0 تا 99 استفاده کرده ایم این کار در صورتی که بزرگ باشد سبب Memory Leak می شود (قبلا Memory Leak را توضیح داده ایم در سایت جستجو کنید)
برای اینکه از این کار جلوگیری کنیم باید از StringBuilder استفاده کنیم.
دلیل دوم که از StringBuilder استفاده می شود سرعت فوق العاده بالای آن در انجام کار هاست به طور مثال شما اگر بخواهید یک حقله داشته باشید که بخواهد یک میلیون بار اجرا شود اولین اینکه به خطا می خورید و در صورتی که به خطا نخوردید این عملیات شاید ساعت ها طول بکشد اما اگر این کار را با StringBuilder انجام دهید شاید در کسری از دقیقه به اتمام برسد البته به گوشی و پردازنده آن هم بستگی دارد.
و یک چیز جالب هم بگویم در صورتی که از کد زیر استفاده کنید.
1 | String s = "1, " + "2, " + "3, " + "4, " ...; |
یعنی خودتان هر segment را تعریف کنید compiler جاوا از StringBuilder استفاده خواهد کرد.
برای ایجاد یک String Builder باید همانند زیر عمل کنید.
1 | StringBuilder sb = new StringBuilder(); |
در بالا یک Stringbuilder ساخته شده که 16 خانه ظرفیت دارد اگر در مقدار Stringbuilder چیزی قرار ندهیم به صورت پیشفرض برابر با 16 خواهد بود برای اینکه مقدار آن را تغییر دهیم باید مثل زیر عمل کنیم.
1 | StringBuilder sb = new StringBuilder(25); |
در بالا ما یک StringBuilder داریم که 25 خانه ظرفیت دارد.
برای اضافه کردن مقدار در StringBuilder از append استفاده می شود همانند زیر
1 | sb.append("programchi.ir"); |
انجام عملیات درج در StringBuilder
1 2 | sb.insert(0,"wow"); sb.insert(1,""); |
در بالا درج اولی یعنی این که در index که برابر با 0 باشه مقدار wow را قرار بده بهترین کارت انجام تست است تا بهتر متوجه شوید.
به دست آودن طول StringBuilder
1 2 3 | StringBuilder sbnew = new StringBuilder(); sbnew.append("123456") String len=sbnew.lenght(); |
در بالا طول کارکتر هایی که در StringBuilder هست در متغیر ذخیره می شود.
به دست آوردن ظرفیت StringBuilder
1 2 | StringBuilder sbnew = new StringBuilder(15); String capacity = sbnew.capacity(); |
مقدار ظرفیت یعنی مقدار خانه هایی که در StringBuilder تعریف شده که در بالا برابر با 15 است.
در پایین تر به یک مثال کاربردی تر می پردازیم.
در پایین یک مسری به filename بدهید در پایین می خواهیم یک فایل txt را از مسیری بخونیم و با استفاده از کد زیر تغییراتی در آن ایجاد کنیم بعد از خواندن هر خط در خط بعدی یک @ اضافه می شود و به خاطر اینکه از خطای memory Leak جلوگیری کنیم باید از try و catch استفاده کنیم قبلا به صورت مفصل توضیح داده بودیم می توانید در سایت جستجو کنید. پس در پایین از BufferREeader برای خواندن فایل استفاده کردیم
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | String filename = ""; try { BufferedReader br = new BufferedReader(new FileReader(filename)); StringBuilder sbFile = new StringBuilder(); String line = br.readLine(); while (line != null) { sbFile.append(line); sbFile.append('@'); line = br.readLine(); } String readFile = sbFile.toString(); br.close(); System.out.println("from file: "+readFile); } catch (FileNotFoundException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } |
این آموزش هم به پایان رسید.
موفق و موید باشید.
ممنونم خیلی بدردم خورد
سلام
من میخوام با srtringBilder اطلاعاتی که از سرور دریافت میکنم رو ذخیره کنم در واقع با اسینک تسک کار میکنم و استرینگ بیلدر رو در متد دو این بک گراند ریترن میکنم هیچ اروری نمیده اما زمانی که برنامه نصب میشه و اجارا میشه کرش میکنه و میگه stringBilder()on a null object refers هر کاری میکنم مشکل رفع نمیشه دلیل این ارور چیه؟