اسٽرنگ ڪلاس
هي طبقو ڪردارن جي تسلسل جي نمائندگي ڪري ٿو. پروگرامن ۾ بيان ڪيل سڀئي اسٽرنگ لفظ، جهڙوڪ "هي اسٽرنگ" اسٽرنگ ڪلاس جا مثال آهن. اسٽرنگ ۾ ٻه بنيادي خاصيتون آهن:- هي هڪ ناقابل بدلو طبقو آهي
- هي فائنل ڪلاس آهي
final
) نه ٿي سگھندا ۽ ڪلاس جا مثال ٺاھڻ ( immutable
) کان پوءِ تبديل نه ٿي سگھندا. هي اسٽرنگ ڪلاس کي ڪيترائي اهم فائدا ڏئي ٿو:
-
غير تبديلي جي ڪري، اسٽرنگ ڪلاس جي هڪ مثال جو هيش ڪوڊ ڪيش ڪيو ويو آهي. ان کي هر دفعي جائزو وٺڻ جي ضرورت ناهي ڇو ته اعتراض جي فيلڊ ويلز ڪڏهن به تبديل نه ٿينديون ان کان پوء ان کي ٺاهيو ويندو. هي اعلي ڪارڪردگي ڏئي ٿو جڏهن هن ڪلاس کي استعمال ڪندي هڪ ڪنجي لاء
HashMap
. -
اسٽرنگ ڪلاس کي استعمال ڪري سگھجي ٿو گھڻن موضوعن واري ماحول ۾ بغير اضافي هم وقت سازي جي.
-
اسٽرنگ ڪلاس جي هڪ ٻي خصوصيت اها آهي ته اها
+
جاوا ۾ آپريٽر کي اوورلوڊ ڪري ٿي. تنهن ڪري، تارن جو ڳنڍڻ (اضافو) بلڪل سادو آهي:
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, int end)
start
- پوزيشن کان پوزيشن کان شروع ٿيندڙ سب اسٽرينگ واپس ڪندوend
substring(int start)
- پوزيشن تي شروع ٿيندڙ سبسٽرنگ واپس ڪندو
start
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
}
فائدا:
-
جيئن اڳ ۾ ئي ذڪر ڪيو ويو آهي، StringBuffer هڪ ميوٽيبل ڪلاس آهي، تنهنڪري ان سان ڪم ڪرڻ سان ميموري گندگي جي ساڳي مقدار پيدا نه ٿئي جيئن String سان. تنهن ڪري، جيڪڏهن تارن تي تمام گهڻيون تبديليون ڪيون وينديون آهن، اهو استعمال ڪرڻ بهتر آهي
StringBuffer
. -
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 (نه) |
تار جي حفاظت | ها، بدلجڻ جي ڪري | ها، هم وقت سازي جي ڪري | نه |
جڏهن استعمال ڪرڻ لاء | جڏهن تارن سان ڪم ڪري رهيا آهن ته گهٽ ۾ گهٽ تبديل ٿي ويندا | جڏهن تارن سان ڪم ڪري رهيا آهن جيڪي اڪثر ڪري تبديل ڪيا ويندا گھڻن موضوعن واري ماحول ۾ | جڏهن تارن سان ڪم ڪري رهيا آهن جيڪي اڪثر ڪري هڪ واحد موضوع واري ماحول ۾ تبديل ڪيا ويندا |
GO TO FULL VERSION