الدرس 7 من 10
النصوص
- 13 دقيقة
- 6 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
equals لا == و StringBuilder
الشرح
النصّ كائن من صنف String وله طرق كثيرة: length() بأقواس هنا، وcharAt(i) حرف في موضع، وtrim() تحذف المسافات من الطرفين، وtoLowerCase()، وreplace(" ", "")، وsplit(" +") تقطّع النصّ مصفوفةً عند كل مسافة أو أكثر. والنصّ لا يتغيّر أبدًا: كل هذه الطرق تُرجع نصًّا جديدًا، فـ name.trim(); وحدها لا تفعل شيئًا.
والفخّ الأشهر في Java: == بين نصّين تسأل «هل هما الكائن نفسه؟» لا «هل حروفهما واحدة؟». قد تصيب مع النصوص المكتوبة في الكود، ثم تخطئ مع نصّ جاء من إدخال أو بُني أثناء التشغيل. قارن المحتوى دائمًا بـ a.equals(b)، أو بـ equalsIgnoreCase لتتجاهل حالة الأحرف.
ولأن النصّ لا يتغيّر، فوصله بـ += داخل حلقة يبني نصًّا جديدًا في كل دورة. StringBuilder نصّ قابل للتعديل: append تُلحق به، وreverse() تعكسه في مكانه، وtoString() تُرجع النصّ النهائي.
المطلوب
samePlayer(a, b) تُرجع true إن كان الاسمان واحدًا، مع تجاهل حالة الأحرف والمسافات حولهما. وreverseWords(s) تعكس ترتيب الكلمات بـ StringBuilder، بمسافة واحدة بينها مهما كثرت المسافات في الأصل. وisPalindrome(s) تُرجع true إن قُرئ النصّ من طرفيه سواءً، مع تجاهل الحالة والمسافات. ثم اطبع من main ناتج reverseWords("Java runs Minecraft").
معايير التصحيح
6 معايير- samePlayer تقارن الحروف بـ equals لا ==
- samePlayer تتجاهل حالة الأحرف والمسافات حول الاسم
- reverseWords تعكس ترتيب الكلمات
- reverseWords بمسافة واحدة مهما كثرت المسافات
- isPalindrome تتجاهل الحالة والمسافات
- طُبع: Minecraft runs Java