Methods Of String

1. الطرق الأساسية

أ. التحويل بين الحالات

  • toUpperCase: لتحويل الأحرف إلى أحرف كبيرة.
  • toLowerCase: لتحويل الأحرف إلى أحرف صغيرة.
String name = "Dart Programming";

print(name.toUpperCase()); // "DART PROGRAMMING"
print(name.toLowerCase()); // "dart programming"
Dart

ملاحظة: لا تؤثر على الحروف العربية

ب. الطول والمحتوى :

  • length تُرجع عدد الأحرف في السلسلة النصية.
  • isEmpty – isNotEmpty: يتحقق هل السلسلة فارغة أم لا.
String text = "مرحبا";

print(text.length); // 5 (عدد الحروف)
print(text.isEmpty); // false
print(text.isNotEmpty); // true
Dart

2. البحث والاستبدال

  • contains: يتحقق هل الكلمة تحتوي على جزء معيّن أم لا.
  • startsWith: هل يبدأ النص بكلمة معينة؟
  • endsWith: هل ينتهي النص بكلمة معينة؟
  • indexOf: تُرجع موقع أول ظهور للكلمة داخل النص، وإذا لم توجد تُرجع -1.
  • lastIndexOf: تُرجع موقع آخر ظهور للكلمة داخل النص.
String sentence = "Dart هي لغة برمجة قوية";

print(sentence.contains("لغة")); // true
print(sentence.startsWith("Dart")); // true
print(sentence.endsWith("قوية")); // true
print(sentence.indexOf("برمجة")); // 12 (موقع بداية الكلمة)
Dart

ب. الاستبدال

  • replaceAll: تستبدل جزء من النص بكلمة جديدة.
  • replaceFirst: تستبدل جزء من النص بكلمة جديدة.
String message = "أحب Dart وأحب Flutter";

print(message.replaceAll("أحب", "أتعلم")); 
// "أتعلم Dart وأتعلم Flutter"

print(message.replaceFirst("أحب", "أتعلم"));
// "أتعلم Dart وأحب Flutter"
Dart

3. التقسيم والتقطيع

أ. تقسيم النص: split => تقسم النص إلى أجزاء باستخدام فاصل.

void main() {
  String names = "Ali,Ahmed,Mona";
  List<String> list = names.split(",");

  print(list); // [Ali, Ahmed, Mona]
}
Dart

contains (“نص”):

🔹 يتحقق هل الكلمة تحتوي على جزء معيّن أم لا.

String email = "[email protected]";

print(email.contains('@')); // true
print(email.endsWith('.com')); // true

String number = "12345";
print(number.isNotEmpty); // true
print(number.codeUnits); // [49, 50, 51, 52, 53]
Dart

ب. تقطيع النص

  • substring: يأخذ جزء من النص حسب الموقع (index) حيث يبدأ من الرقم الاول وينتهي عند الرقم الثاني ولكن النهاية تكون غير مضمنة.
String text = "Hello World";

print(text.substring(6)); // "World"
print(text.substring(0, 5)); // "Hello"
print(text.substring(2, 7)); // "llo W"
Dart

4. التنسيق والمسافات
أ. إزالة المسافات

  • trim: يزيل الفراغات الزائدة من البداية والنهاية.
  • trimLeft: يزيل الفراغات الزائدة من اليسار.
  • trimRight: يزيل الفراغات الزائدة من اليمين.
String spaced = "   Dart   ";

print(spaced.trim()); // "Dart"
print(spaced.trimLeft()); // "Dart   "
print(spaced.trimRight()); // "   Dart"
Dart

ب. حشو النص

  • padLeft(length, [character]) : تضيف رموز على اليسار حتى يصل النص لطول معيّن.
  • padRight(length, [character]) تضيف رموز على اليمين حتى يصل النص لطول معيّن.
String num = "5";

print(num.padLeft(3, '0')); // "005"
print(num.padRight(3, '*')); // "5**"
Dart

6. الطرق المتقدمة
أ. التكرار

String heart = "❤️";

print(heart * 3); // "❤️❤️❤️"
Dart

ب. التحويل إلى قائمة حروف

  • runes: تُرجع الرموز (Unicode) الخاصة بالنص.
  • Unicode هو معيار ترميز أحرف عالمي مصمم لتمثيل النصوص والرموز من جميع أنظمة الكتابة حول العالم.
  • Unicode هو معيار ترميز الأحرف الأكثر أساسية وشمولية. لكل حرف رقم سداسي عشري فريد، يتكون من 4 إلى 6 أرقام، يُعرف باسم نقطة يونيكود. يونيكود معيار موحد لجميع منصات الحوسبة، مما يتيح تمثيل النصوص ومعالجتها بشكل متسق عبر مختلف الأنظمة والتطبيقات.
String word = "نص";

print(word.runes.toList()); // [1606, 1589]
print(String.fromCharCodes([1606, 1589])); // "نص"
Dart
  • codeUnitAt(index): يُرجع الكود الرقمي (Unicode) للحرف في موقع معيّن.
void main() {
  String char = "A";
  print(char.codeUnitAt(0)); // 65
}
Dart
compareTo(“نص”):

🔹 يقارن بين سلسلتين (ترتيبًا أبجديًا):

  • يُرجع 0 إذا كانت متساوية
  • يُرجع -1 إذا النص الأصلي أصغر
  • يُرجع 1 إذا النص الأصلي أكبر
void main() {
  print("apple".compareTo("banana")); // -1
  print("apple".compareTo("apple"));  // 0
}
Dart
الملاحظات المهمة
  1. النصوص غير قابلة للتعديل (Immutable): أي عملية تعديل ترجع نسخة جديدة
  2. الحساسية للحالة"Dart" != "dart" ما لم تستخدم toLowerCase()
  3. الدعم الكامل للـ Unicode: بما في ذلك العربية والرموز
  4. الأداء: عمليات مثل replaceAll قد تكون مكلفة للنصوص الطويلة
الفرق بين أهم الطرق
الطريقةالوصفمثال
contains()يبحث عن نص"Dart".contains("ar") → true
substring()يستخرج جزءاً من النص"Hello".substring(1,3) → "el"
split()يقسم النص إلى قائمة"a,b,c".split(",") → ["a","b","c"]
trim()يزيل المسافات" dart ".trim() → "dart"

هل تريد شرحاً أكثر تفصيلاً لأي طريقة معينة؟

الدالةوظيفتهامثال النتيجة
lengthعدد الأحرف"Ali".length → 3
toUpperCase()تحويل لأحرف كبيرة"hello" → "HELLO"
contains("x")هل يحتوي النص على “x”؟true/false
substring(0, 2)يأخذ جزء من النص"Ahmed" → "Ah"
replaceAll()استبدال كلمة بكلمة"Java" → "Dart"
trim()حذف الفراغات" text " → "text"
split(",")يقسم النص إلى أجزاء"Ali,Ahmed" → [Ali, Ahmed]
isEmptyهل السلسلة فارغة؟true/false