الدرس 30: معالجة النصوص: String مقابل StringBuilder/StringBuffer
التعامل مع النصوص أمر أساسي، وتوفر Java ثلاث فئات رئيسية لهذا الغرض.
1. فئة String (غير قابلة للتغيير - Immutable)
النصوص في Java غير قابلة للتغيير ، مما يعني أنه بمجرد إنشاء كائن String ، لا يمكن تغيير قيمته. أي عملية تبدو وكأنها تعدل النص (مثل الدمج) تنشئ في الواقع كائناً نصياً جديداً تماماً في الذاكرة.
java String s = "Java"; s = s + " Course"; // تم إنشاء كائن String جديد ويشير 's' إليه.
// دوال String الشائعة: String name = " Alice "; name = name.trim(); // يزيل المسافات int index = name.indexOf('i'); // يجد موقع الحرف boolean check = name.startsWith("Al"); // true
متى تستخدم String: لبيانات النصوص البسيطة والثابتة أو عندما لا تتغير قيم النصوص بشكل متكرر.
2. StringBuilder (قابل للتغيير وغير متزامن)
كائنات StringBuilder قابلة للتغيير ، مما يعني أنه يمكن تعديلها دون إنشاء كائن جديد في كل مرة. وهذا يجعلها فعالة للغاية للعمليات التي تتضمن تعديلات متكررة (إلحاق، إدراج، حذف).
java StringBuilder sb = new StringBuilder("Start"); sb.append("ing"); // sb لا يزال يشير إلى نفس الكائن في الذاكرة sb.insert(0, "Re");
System.out.println(sb.toString()); // المخرج: Restarting
متى تستخدم StringBuilder: عند إجراء معالجة مكثفة للنصوص داخل خيط واحد (السيناريو الأكثر شيوعاً).
3. StringBuffer (قابل للتغيير ومتزامن)
StringBuffer مماثل وظيفياً لـ StringBuilder ، لكن دواله متزامنة (synchronized) (آمنة للخيوط المتعددة). التزامن يضيف حملاً إضافياً على الأداء.
متى تستخدم StringBuffer: فقط عند العمل في بيئة خيوط متعددة حيث قد تصل عدة خيوط وتعدل نفس التسلسل في وقت واحد.
| الميزة | String | StringBuilder | StringBuffer |
|---|---|---|---|
| القابلية للتغيير | غير قابل للتغيير | قابل للتغيير | قابل للتغيير |
| الأداء | بطيء (عند التعديل) | سريع | أبطأ (بسبب التزامن) |
| الأمان مع الخيوط | نعم | لا | نعم |