StringBuilder
StringBuilder هو فئة قابلة للتغيير لبناء النصوص. في هذا الدرس، سنتعلم كيفية استخدامه.
لماذا StringBuilder؟
String غير قابلة للتغيير — أي تعديل يُنشئ نصًا جديدًا:
JAVA
String text = "";
for (int i = 0; i < 1000; i++) {
text += i; // يُنشئ 1000 كائن String — غير فعال!
}
StringBuilder يُعدّل النص في نفس الكائن:
JAVA
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
sb.append(i); // يُعدّل نفس الكائن — فعال!
}
String result = sb.toString();
إنشاء StringBuilder
JAVA
// فارغ
StringBuilder sb1 = new StringBuilder();
// بقيمة أولية
StringBuilder sb2 = new StringBuilder("مرحباً");
// بسعة محددة
StringBuilder sb3 = new StringBuilder(100);
العمليات الأساسية
append — إضافة
JAVA
StringBuilder sb = new StringBuilder("مرحباً");
sb.append(" "); // "مرحباً "
sb.append("بالعالم"); // "مرحباً بالعالم"
sb.append("!"); // "مرحباً بالعالم!"
String result = sb.toString(); // "مرحباً بالعالم!"
insert — إدراج
JAVA
StringBuilder sb = new StringBuilder("مرحباً بالعالم");
sb.insert(7, "عزيز "); // "مرحباً عزيز بالعالم"
delete — حذف
JAVA
StringBuilder sb = new StringBuilder("مرحباً بالعالم");
sb.delete(6, 13); // "مرحباً"
replace — استبدال
JAVA
StringBuilder sb = new StringBuilder("مرحباً بالعالم");
sb.replace(7, 12, "Java"); // "مرحباً بJava"
reverse — عكس
JAVA
StringBuilder sb = new StringBuilder("Hello");
sb.reverse(); // "olleH"
charAt و indexOf
JAVA
StringBuilder sb = new StringBuilder("مرحباً");
char ch = sb.charAt(0); // 'م'
int pos = sb.indexOf("حباً"); // 2
مقارنة String و StringBuilder
| الميزة | String | StringBuilder |
|---|---|---|
| قابلية التغيير | Immutable | Mutable |
| الأداء (تعديلات كثيرة) | بطيء | سريع |
| الأمان (خيوط) | آمن | غير آمن |
| الاستخدام | نصوص ثابتة | بناء نصوص ديناميكي |
أمثلة عملية
بناء CSV
JAVA
public static String buildCSV(String[] items) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < items.length; i++) {
sb.append(items[i]);
if (i < items.length - 1) {
sb.append(",");
}
}
return sb.toString();
}
String csv = buildCSV(new String[]{"أحمد", "محمد", "علي"});
// "أحمد,محمد,علي"
بناء HTML
JAVA
public static String buildList(String[] items) {
StringBuilder sb = new StringBuilder("<ul>\n");
for (String item : items) {
sb.append(" <li>").append(item).append("</li>\n");
}
sb.append("</ul>");
return sb.toString();
}
بناء SQL
JAVA
public static String buildQuery(String table, String[] columns, String condition) {
StringBuilder sb = new StringBuilder("SELECT ");
for (int i = 0; i < columns.length; i++) {
sb.append(columns[i]);
if (i < columns.length - 1) sb.append(", ");
}
sb.append(" FROM ").append(table);
if (condition != null && !condition.isEmpty()) {
sb.append(" WHERE ").append(condition);
}
return sb.toString();
}
String query = buildQuery("users", new String[]{"id", "name", "age"}, "age > 18");
// "SELECT id, name, age FROM users WHERE age > 18"
StringBuffer
StringBuffer هو نسخة متزامنة (thread-safe) من StringBuilder:
JAVA
StringBuffer sb = new StringBuffer("مرحباً");
sb.append(" بالعالم");
| StringBuilder | StringBuffer |
|---|---|
| غير متزامن | متزامن |
| أسرع | أبطأ |
| لخيط واحد | لعدة خيوط |
❓ أسئلة شائعة
س متى أستخدم String ومتى أستخدم StringBuilder؟
ج استخدم String عندما لا تُعدّل النص كثيرًا. استخدم StringBuilder عندما تحتاج إلى تعديلات متكررة.
س لماذا StringBuilder غير آمن للخيوط؟
ج لأنه لا يُزامن (synchronized). إذا كنت تعمل مع عدة خيوط، استخدم StringBuffer.
س هل يمكن تحويل StringBuilder إلى String؟
ج نعم، باستخدام toString().
📖 ملخص
- StringBuilder هو فئة قابلة للتغيير لبناء النصوص
- العمليات: append، insert، delete، replace، reverse
- StringBuilder أسرع من String للتعديلات المتكررة
- StringBuffer هو النسخة المتزامنة (للخيوط المتعددة)
📝 تمارين
- بناء نص: استخدم StringBuilder لبناء نص من 100 رقم مفصول بفاصلة
- عكس النص: اكتب دالة تعكس نصًا باستخدام StringBuilder
- إزالة التكرار: اكتب دالة تزيل الأحرف المتتالية المكررة (مثل "aabbcc" → "abc")
الدرس التالي
في الدرس التالي، سنتعلم الدوال المدمجة للنصوص — Math و التاريخ.



