تنفيذ خوارزميات السلاسل النصية
مُقدَّم| English | المعنى |
|---|---|
| StringIndexOutOfBoundsException/strɪŋ ˈɪndeks ˈaʊtəv baʊndz ekˈsepʃn/ | استثناء خارج نطاق السلسلة StringIndexOutOfBoundsException |
المرور على الأحرف
- لمعالجة النص (String)، مرر الحلقة على الفهارس من
0إلىlength() - 1. for (int i = 0; i < s.length(); i++) { ... s.substring(i, i+1) ... }s.substring(i, i+1)يعطي نص (String) أحرف واحد عند الفهرسi.- هذا يزرع كل حرف بالترتيب — وهو أساس معظم خوارزميات النصوص.
عدّ الأحرف
- اجمع الحلقة مع
ifلعدّ الأحرف المطابقة. - "عدّ الحروف المتحركة": مرر الحلقة، و
ifإذا كان الحرف الحالي حرفًا متحركًا،count++. - ينطبق نمط المجمع من 2.9 مباشرة على النصوص.
- قارن الأحرف بـ
.equals()، لا بـ==.
بناء نص جديد
- لتحويل النص، قم ببناء نص جديد مع
+، لأن النصوص غير قابلة للتعديل (immutable). String result = "";ثمresult = result + something;داخل الحلقة.- "عكس نصًا": أضف كل حرف من النهاية نحو البداية.
- النص الأصلي لا يتغير — أنت تجمع نصًا جديدًا.
حدود الفهارس
- الفهارس الصالحة تمتد من
0إلىlength() - 1؛ الخروج عن النطاق يسبب خطأ StringIndexOutOfBoundsException. s.substring(i, i+1)آمن فقط طالماi < s.length().- شرط الحلقة
i < s.length()يحافظ علىiضمن النطاق. - أخطاء حدود off-by-one هي الأكثر شيوعًا في حلقات النصوص.
مرر حلقة على فهارس النص باستخدام i < s.length()، لا i <= s.length(). آخر فهرس صالح هو length() - 1؛ لمس الفهرس length() يسبب خطأ StringIndexOutOfBoundsException. وبنّ النص المحوّل عن طريق تجميع نص جديد (result += ch) — لا يمكنك تعديل النص في مكانه، لأن النصوص غير قابلة للتعديل.
عدّ الحروف المتحركة في s:
int count = 0;for (int i = 0; i < s.length(); i++) { String ch = s.substring(i, i+1); if ("aeiou".indexOf(ch) >= 0) count++; }- يزرع كل حرف؛ يعدّه إذا ظهر في
"aeiou".
عالج النص عن طريق مرور حلقة على فهارسه 0 إلى length()-1 (شرط i < s.length())، واقرأ كل حرف باستخدام s.substring(i, i+1). عد باستخدام if، أو بنِ نصًا جديدًا عن طريق التجميع باستخدام + (النصوص غير قابلة للتعديل). البقاء ضمن النطاق يتجنب خطأ StringIndexOutOfBoundsException.
التكرار عبر أحرف HELLO
حلقة تزور الفهارس من 0 إلى length()-1.
شرط الحلقة الصحيح لزيارة كل حرف من String s هو...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
الفهارس الصالحة هي 0..length()-1، لذا i < s.length().
الوصول إلى فهرس s.length() من String يثير...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
آخر فهرس صالح هو length()-1.
لبناء سلسلة نصية معكوسة، بما أن Strings غير قابلة للتعديل، فإنك...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Strings غير قابلة للتعديل — بنية واحدة جديدة.
كم عدد الأحرف التي تزورها حلقة لـ String "HELLO" (باستخدام i < length())؟
Difficulty 2/5 · 140 coins + a small bonus on first completion today
الفهارس 0..4 → 5 أحرف.
نمط المجمع من الحلقات ينطبق أيضاً على عدّ الأحرف في String.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
count++ داخل حلقة الفهارس يعدّ الأحرف المطابقة.