الدرس 7 من 10
النصوص ودوالها
- 15 دقيقة
- 6 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
الدالتان Split وReplace والصنف StringBuilder
الشرح
النصّ في C# لا يتغيّر بعد إنشائه، فكل دالة تستدعيها عليه تُرجع نصًّا جديدًا وتترك الأصل كما هو، ولذلك إذا كتبت name.Trim(); وحدها في سطر حُسبت النتيجة ثم ضاعت، والصواب name = name.Trim();. ومن دوال النصّ Trim() التي تحذف المسافات من الطرفين، وToUpper() التي تحوّل الأحرف الإنجليزية إلى أحرف كبيرة، وContains("x") التي تخبرك هل يحتوي النصّ على نصّ معيّن، وReplace("a", "b") التي تستبدل كل ظهور وليس الأول فقط. ويمكنك أن تستدعيها متتالية هكذا: code.Trim().ToUpper().
وتقتطع Substring(start, length) جزءًا من النصّ، ومُعامِلها الثاني هو طول الجزء وليس موضع نهايته، وترمي استثناءً إذا تجاوز الجزء آخر النصّ. وتقسم Split(',') النصّ عند كل فاصلة وتُرجع مصفوفة string[]، وتفعل string.Join(" | ", parts) العكس فتصل العناصر بفاصل بينها. أما new string('*', 4) فتكرّر الحرف أربع مرّات.
ولأن كل تعديل ينشئ نصًّا جديدًا، فإن بناء نصّ بـ += داخل حلقة ينسخه كلّه في كل دورة، أما StringBuilder من System.Text فيجمع الأجزاء في مكان واحد، فتضيف Append نصًّا أو حرفًا إلى آخره، وتعطيك ToString() النصّ الكامل في النهاية.
المطلوب
أكمل NormalizeCode(code) لتُرجع رمز الهدية بلا مسافات في طرفيه وبأحرف كبيرة، وCensor(message, word) لتُرجع الرسالة بعد أن تستبدل كل ظهور للكلمة فيها بنجوم عددها بعدد أحرف الكلمة. ثم أكمل Preview(text, max) لتُرجع أول max حرفًا ثم ... إذا كان النصّ أطول من max، وتُرجع النصّ كما هو إذا لم يكن أطول، وFormatTags(csv) لتأخذ وسومًا مفصولة بفواصل وتحذف المسافات حولها ثم تصلها بـ " | ". وأخيرًا اكتب HealthBar(hp, maxHp) باستعمال StringBuilder، فتبدأ بالقوس [، ثم تضع # لكل نقطة صحّة باقية و- لكل نقطة مفقودة حتى تبلغ maxHp، ثم تختم بـ ]، فتُرجع HealthBar(3, 5) النصّ [###--].
الفحوص
6 فحوص- الدالة NormalizeCode تحذف المسافات وتكبّر الأحرف
- الدالة Censor تستبدل كل ظهور للكلمة بنجوم بعدد أحرفها
- الدالة Preview تقصّ النصّ الطويل وتضيف ... في آخره
- الدالة Preview تترك النصّ القصير كما هو
- الدالة FormatTags تقسم الوسوم وتحذف المسافات ثم تصلها بـ " | "
- الدالة HealthBar ترسم الشريط مثل [###--]