JavaRush /جاوا بلاگ /Random-SD /جاوا ۾ String، StringBuffer ۽ StringBuilder جو تعارف

جاوا ۾ String، StringBuffer ۽ StringBuilder جو تعارف

گروپ ۾ شايع ٿيل
جاوا ۾ ٽي ڪلاس آھن ٽيڪسٽ ڊيٽا سان ڪم ڪرڻ لاءِ: String ، StringBuffer ۽ StringBuilder . ٻولي سکڻ جي شروعات ۾ هر ڊولپر پهريون ڀيرو ملندو آهي. باقي ٻن بابت ڇا؟ انهن جا اختلاف ڇا آهن، ۽ جڏهن هڪ يا ٻئي طبقي کي استعمال ڪرڻ بهتر آهي؟ عام طور تي، انهن جي وچ ۾ فرق ننڍڙو آهي، پر اهو بهتر آهي ته عملي طور تي هر شيء کي سمجهڻ لاء :) جاوا ۾ String، StringBuffer ۽ StringBuilder جو تعارف - 1

اسٽرنگ ڪلاس

هي طبقو ڪردارن جي تسلسل جي نمائندگي ڪري ٿو. پروگرامن ۾ بيان ڪيل سڀئي اسٽرنگ لفظ، جهڙوڪ "هي اسٽرنگ" اسٽرنگ ڪلاس جا مثال آهن. اسٽرنگ ۾ ٻه بنيادي خاصيتون آهن:
  • هي هڪ ناقابل بدلو طبقو آهي
  • هي فائنل ڪلاس آهي
عام طور تي، اسٽرنگ ڪلاس ۾ ٻار ( final) نه ٿي سگھندا ۽ ڪلاس جا مثال ٺاھڻ ( immutable) کان پوءِ تبديل نه ٿي سگھندا. هي اسٽرنگ ڪلاس کي ڪيترائي اهم فائدا ڏئي ٿو:
  1. غير تبديلي جي ڪري، اسٽرنگ ڪلاس جي هڪ مثال جو هيش ڪوڊ ڪيش ڪيو ويو آهي. ان کي هر دفعي جائزو وٺڻ جي ضرورت ناهي ڇو ته اعتراض جي فيلڊ ويلز ڪڏهن به تبديل نه ٿينديون ان کان پوء ان کي ٺاهيو ويندو. هي اعلي ڪارڪردگي ڏئي ٿو جڏهن هن ڪلاس کي استعمال ڪندي هڪ ڪنجي لاء HashMap.

  2. اسٽرنگ ڪلاس کي استعمال ڪري سگھجي ٿو گھڻن موضوعن واري ماحول ۾ بغير اضافي هم وقت سازي جي.

  3. اسٽرنگ ڪلاس جي هڪ ٻي خصوصيت اها آهي ته اها +جاوا ۾ آپريٽر کي اوورلوڊ ڪري ٿي. تنهن ڪري، تارن جو ڳنڍڻ (اضافو) بلڪل سادو آهي:

public static void main(String[] args) {
    String command = "Follow" + " " + "the" + " " + "white" + " " + "rabbit";
    System.out.println(command); // Follow the white rabbit
}
هود جي تحت، اسٽرنگ ڪنٽينشن StringBuilder يا StringBuffer ڪلاس (ڪمپائلر جي صوابديد تي) ۽ هڪ طريقو append(اسان انهن ڪلاسن بابت ٿوري دير بعد ڳالهائينداسين). جيڪڏهن اسان اسٽرنگ ڪلاس جا مثال ٻين طبقن جي مثالن سان شامل ڪريون ٿا، بعد ۾ هڪ اسٽرنگ نمائندگي ۾ گھٽجي ويندي:
public static void main(String[] args) {
    Boolean b = Boolean.TRUE;
    String result = "b is " + b;
    System.out.println(result); //b is true
}
toString()هي اسٽرنگ ڪلاس جي هڪ ٻي دلچسپ ملڪيت آهي: ڪنهن به طبقي جون شيون ڪلاس ۾ بيان ڪيل طريقي کي استعمال ڪندي اسٽرنگ نمائندگي ۾ اڇلائي سگهجن ٿيون Object۽ ٻين سڀني طبقن کان ورثي ۾ ملي ٿي. گهڻو ڪري ڪنهن شئي تي toString() جو طريقو implicitly سڏيو ويندو آهي. مثال طور، جڏهن اسان اسڪرين تي ڪا شيءِ ڏيکاريون ٿا يا ڪنهن ٻئي طبقي جي شئي ۾ اسٽرنگ شامل ڪريون ٿا. اسٽرنگ ڪلاس ۾ ھڪڙي وڌيڪ خصوصيت آھي. جاوا ڪوڊ ۾ بيان ڪيل سڀئي اسٽرنگ لٽرلز، جهڙوڪ "asdf"، گڏ ڪيل وقت تي ڪيش ڪيا ويندا آهن ۽ نام نهاد اسٽرنگ پول ۾ شامل ڪيا ويا آهن. جيڪڏهن اسان هيٺ ڏنل ڪوڊ هلائيندا آهيون:
String a = "Wake up, Neo";
String b = "Wake up, Neo";

System.out.println(a == b);
اسان ڪنسول ۾ سچ ڏسندا سين ڇو ته متغير aاصل ۾ bاسٽرنگ ڪلاس جي ساڳئي مثال جو حوالو ڏيندو جيڪو ڪمپائل جي وقت اسٽرنگ پول ۾ شامل ڪيو ويو هو. اهو آهي، ساڳئي قدر سان ڪلاس جا مختلف مثال پيدا نه ڪيا ويا آهن، ۽ ياداشت محفوظ ڪئي وئي آهي.

خاميون:

اهو اندازو لڳائڻ ڏکيو ناهي ته اسٽرنگ ڪلاس بنيادي طور تي تارن سان ڪم ڪرڻ لاءِ گهربل آهي. پر ڪن حالتن ۾، String طبقي جون مٿيون خاصيتون فائدن کان نقصانن ۾ بدلجي سگهن ٿيون. هڪ دفعو جاوا ڪوڊ ۾ اسٽرنگ ٺاهيا ويا آهن، ڪيترائي آپريشن اڪثر ڪري رهيا آهن انهن تي:
  • تارن کي مختلف رجسٽرن ۾ تبديل ڪرڻ؛
  • substring extraction؛
  • ڳنڍڻ؛
  • وغيره
اچو ته هن ڪوڊ کي ڏسو:
public static void main(String[] args) {

    String s = " Wake up, Neo! ";
    s = s.toUpperCase();
    s = s.trim();

    System.out.println("\"" + s + "\"");
}
پهرين نظر ۾، اهو لڳي ٿو ته اسان صرف ان لائن جو ترجمو ڪيو آهي "جاگو، نو!" وڏي اکر ۾، هن اسٽرنگ مان اضافي خالن کي هٽايو ۽ ان کي اقتباس ۾ لپايو. حقيقت ۾، اسٽرنگ ڪلاس جي غير متغير هجڻ جي ڪري، هر عمل جي نتيجي ۾، نوان اسٽرنگ مثال ٺاهيا ويندا آهن ۽ پراڻا رد ڪيا ويندا آهن، وڏي مقدار ۾ گندگي پيدا ڪري ٿي. ياداشت جي ضايع ٿيڻ کان ڪيئن بچجي؟

StringBuffer ڪلاس

String اعتراض ۾ تبديلين جي ڪري عارضي گندگي جي تخليق کي سنڀالڻ لاء، توھان استعمال ڪري سگھو ٿا StringBuffer ڪلاس. هي mutableهڪ طبقو آهي، i.e. تبديل ٿيندڙ. StringBuffer طبقي جو هڪ اعتراض اکرن جي هڪ مخصوص سيٽ تي مشتمل ٿي سگهي ٿو، جنهن جي ڊيگهه ۽ قيمت ڪجهه طريقن کي ڪال ڪندي تبديل ڪري سگهجي ٿو. اچو ته ڏسو ته هي ڪلاس ڪيئن ڪم ڪري ٿو. ھڪڙو نئون اعتراض ٺاھڻ لاء، ھڪڙو ٺاھيندڙ استعمال ڪريو، مثال طور:
  • StringBuffer() - هڪ خالي (ڪردار نه) اعتراض ٺاهيندو
  • StringBuffer(String str) - str variable جي بنياد تي ھڪڙو اعتراض ٺاھيندو (ساڳئي تسلسل ۾ str جي سڀني اکرن تي مشتمل آھي)
مشق:
StringBuffer sb = new StringBuffer();
StringBuffer sb2 = new StringBuffer("Not empty");
جاوا ۾ StringBuffer ذريعي اسٽرنگ ڪنٽينشن استعمال ڪيو ويندو آهي append. عام طور تي، StringBuffer ڪلاس ۾ طريقو appendاوورلوڊ ڪيو ويو آهي اهڙي طرح ته اهو تقريبا ڪنهن به قسم جي ڊيٽا کي قبول ڪري سگهي ٿو:
public static void main(String[] args) {
    StringBuffer sb = new StringBuffer();

    sb.append(new Integer(2));
    sb.append("; ");
    sb.append(false);
    sb.append("; ");
    sb.append(Arrays.asList(1,2,3));
    sb.append("; ");

    System.out.println(sb); // 2; false; [1, 2, 3];
}
طريقو اهو appendاعتراض واپس ڏئي ٿو جنهن تي ان کي سڏيو ويو آهي (جهڙوڪ ٻيا ڪيترائي طريقا)، جيڪي ان کي "زنجيرن" ۾ سڏڻ جي اجازت ڏئي ٿو. مٿين مثال کي هن طرح لکي سگهجي ٿو:
public static void main(String[] args) {
    StringBuffer sb = new StringBuffer();

    sb.append(new Integer(2))
            .append("; ")
            .append(false)
            .append("; ")
            .append(Arrays.asList(1,2,3))
            .append("; ");

    System.out.println(sb); // 2; false; [1, 2, 3];
}
StringBuffer طبقي ۾ اسٽرنگ سان ڪم ڪرڻ جا ڪيترائي طريقا آھن. اچو ته مکيه شين جي فهرست ڏيو:
  • delete(int start, int end)- پوزيشن کان شروع ٿيندڙ اکرن جي ذيلي اسٽرينگ کي ختم ڪري ٿو start، ختم ٿيڻend
  • deleteCharAt(int index)- پوزيشن تي ڪردار کي ختم ڪري ٿوindex
  • insert(int offset, String str)- strپوزيشن تي هڪ لائن داخل ڪري ٿو offset. طريقو insertبه overloaded آهي ۽ مختلف دليلن وٺي سگهي ٿو
  • replace(int start, int end, String str)start- سڀني ڪردارن کي پوزيشن کان پوزيشن تائين endتبديل ڪندوstr
  • reverse()- سڀني ڪردارن جي ترتيب کي رد ڪري ٿو
  • substring(int start)- پوزيشن تي شروع ٿيندڙ سبسٽرنگ واپس ڪندو start
  • substring(int start, int end)start- پوزيشن کان پوزيشن کان شروع ٿيندڙ سب اسٽرينگ واپس ڪندوend
طريقن ۽ تعمير ڪندڙن جي مڪمل فهرست سرڪاري دستاويزن ۾ آھي . مٿي ڏنل طريقا ڪيئن ڪم ڪن ٿا؟ اچو ته عملي طور تي ڏسو:
public static void main(String[] args) {
     String numbers = "0123456789";

     StringBuffer sb = new StringBuffer(numbers);

     System.out.println(sb.substring(3)); // 3456789
     System.out.println(sb.substring(4, 8)); // 4567
     System.out.println(sb.replace(3, 5, "ABCDE")); // 012ABCDE56789

     sb = new StringBuffer(numbers);
     System.out.println(sb.reverse()); // 9876543210
     sb.reverse(); // Return the original order

     sb = new StringBuffer(numbers);
     System.out.println(sb.delete(5, 9)); // 012349
     System.out.println(sb.deleteCharAt(1)); // 02349
     System.out.println(sb.insert(1, "One")); // 0One2349
    }

فائدا:

  1. جيئن اڳ ۾ ئي ذڪر ڪيو ويو آهي، StringBuffer هڪ ميوٽيبل ڪلاس آهي، تنهنڪري ان سان ڪم ڪرڻ سان ميموري گندگي جي ساڳي مقدار پيدا نه ٿئي جيئن String سان. تنهن ڪري، جيڪڏهن تارن تي تمام گهڻيون تبديليون ڪيون وينديون آهن، اهو استعمال ڪرڻ بهتر آهي StringBuffer.

  2. StringBuffer هڪ موضوع محفوظ طبقو آهي. ان جا طريقا هم وقت سازي ٿيل آهن ۽ مثال هڪ ئي وقت ڪيترن ئي موضوعن کي استعمال ڪري سگھجن ٿا.

خاميون:

هڪ پاسي، موضوع جي حفاظت طبقي جو هڪ فائدو آهي، ۽ ٻئي طرف، اهو هڪ نقصان آهي. هم وقت سازي جا طريقا سست هوندا آهن غير هم وقت ساز طريقن کان. اهو آهي جتي StringBuilder راند ۾ اچي ٿو. اچو ته ڄاڻون ته هي ڪهڙي قسم جو جاوا ڪلاس آهي - StringBuilder، ان جا ڪهڙا طريقا آهن ۽ ان جون خاصيتون ڪهڙيون آهن.

StringBuilder ڪلاس

جاوا ۾ StringBuilder ھڪڙو طبقو آھي جيڪو ڪردارن جي ھڪڙي ترتيب جي نمائندگي ڪري ٿو. اهو تمام گهڻو ساڳيو آهي StringBuffer هر شيءِ ۾ سواءِ سلسلي جي حفاظت. StringBuilder StringBuffer جي برابر هڪ API مهيا ڪري ٿو. اچو ته اهو هڪ واقف مثال استعمال ڪندي ڏيکاريون، StringBufer کان StringBuilder ڏانهن متغير جي اعلان کي تبديل ڪندي:
public static void main(String[] args) {
    String numbers = "0123456789";

    StringBuilder sb = new StringBuilder(numbers);

    System.out.println(sb.substring(3)); //3456789
    System.out.println(sb.substring(4, 8)); //4567
    System.out.println(sb.replace(3, 5, "ABCDE")); //012ABCDE56789

    sb = new StringBuilder(numbers);
    System.out.println(sb.reverse()); //9876543210
    sb.reverse(); // Return the original order

    sb = new StringBuilder(numbers);
    System.out.println(sb.delete(5, 9)); //012349
    System.out.println(sb.deleteCharAt(1)); //02349
    System.out.println(sb.insert(1, "One")); //0One2349
}
فرق صرف اهو آهي ته StringBuffer ڌاڳو محفوظ آهي ۽ ان جا سڀئي طريقا هم وقت ساز آهن، جڏهن ته StringBuilder نه آهي. اها ئي خصوصيت آهي. جاوا ۾ StringBuilder StringBuffer کان تيز آھي طريقن جي غير هم وقت سازي جي ڪري. تنهن ڪري، اڪثر ڪيسن ۾، سواء هڪ گھڻن موضوعن واري ماحول ۾، اهو بهتر آهي StringBuilder استعمال ڪرڻ جاوا پروگرام لاءِ. اسان هر شي کي ٽن طبقن جي تقابلي جدول ۾ اختصار ڪريون ٿا:

String بمقابلہ StringBuffer vs StringBuilder

تار StringBuffer String Builder
تبديليءَ جي صلاحيت Immutable(نه) mutable(ها) mutable(ها)
وسعت final(نه) final(نه) final(نه)
تار جي حفاظت ها، بدلجڻ جي ڪري ها، هم وقت سازي جي ڪري نه
جڏهن استعمال ڪرڻ لاء جڏهن تارن سان ڪم ڪري رهيا آهن ته گهٽ ۾ گهٽ تبديل ٿي ويندا جڏهن تارن سان ڪم ڪري رهيا آهن جيڪي اڪثر ڪري تبديل ڪيا ويندا گھڻن موضوعن واري ماحول ۾ جڏهن تارن سان ڪم ڪري رهيا آهن جيڪي اڪثر ڪري هڪ واحد موضوع واري ماحول ۾ تبديل ڪيا ويندا
توھان ھن موضوع کي وڌيڪ تفصيل سان پڙھي سگھوٿا JavaRush ڪورس ۾ جاوا ملٽي ٿريڊنگ جستجو جي ٻئي سطح تي:
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION