معالجة البيانات النصية Strings
البيانات النصية ( strings ) هي سلسلة من الحروف المدخلة من قبل المستخدم من الكيبورد تسمى سلسلة نصية strings. وتعرف في لغة الجافا على أنها نصوص و الـ String هو كل ما يدخل من الكيبورد يدخل على شكل سلاسل نصية. سنتعرف على أمرين و هما:
- كيف نقوم بإيجاد طول السلسلة النصية في جافا؟.
- كيف نقوم بدمج سلسلتين في سلسلة واحدة في لغة Java؟.
مثال 1
اكتب برنامج في لغة جافا يحسب طول عدد احرف كلمة "badria " مستخدماً الدالة length.
package str; public class Str { public static void main(String[] args) { String b="badria "; System.out.println(s.length()); } }
انشأنا متغير نصي إسمه b و قيمته badria و عند تشغيل هذا البرنامج سوف يطبع لنا الرقم 7 لأننا تركنا فراغ في آخر الكلمة و اعتبر طولها خمسة.
7
عند إزالة الفراغ سيطبع 4 لأن الـ String يعتبر الفراغ حرف من الأحرف.
مثال 2
اكتب برنامج مستخدماً لغة جافا يقوم بدمج سلسلتين نصيتين الأولى CS و الثانية DB مع بعضهما مستخدماً في ذلك الدالة concat.
package str; public class Str { public static void main(String[] args) { String s="CS"; String s1="DB"; s1=s1.concat(s); System.out.println(s.length(s1)); } }
أنشأنا المتغير الأول إسمه s و قيمته CS و أنشانا المتغير الثاني إسمه s1 و قيمته DB ثم قلنا له s1 يساوي s1 و إدمجه لنا مع المتغير s و طبعنا نتيجة s1. و عند التنفيذ سيطبع لنا CSDB دمج لنا النصين مع بعضهما.
CSDB
إستقطاع جزء من سلسلة نصية
عندما نقول سلسلة نصية strings يعني أنه مجموعة من الكلمات تُشكّل سلسلة نصية أو مجموعة. من الحروف تشكل سلسلة نصية او مجموعة من الرموز و الأحرف و الكلمات. جميعها تشكل سلسلة نصية سوف نتعلم كيفية إستقطاع جزء من سلسلة ربما نستقطع حرف أو كلمة أو جملة من سلسلة نصية. نستخدم في هذا الأمر الدالة substring و هي تقوم بإستقطاع جزء من السلاسل النصية.
مثال 3
قم يإنشاء متغيرين نصيين الأول قيمته badria و الثاني قيمته Muhammad ثم قم بإستقطاع أجزاء من السلسلة النصية عبر الدالة substring بمعامل واحد.
package str; public class Str { public static void main(String[] args) { String s1="badria"; String s2="Muhammad"; String s3=s1.substring(2); System.out.println(s.length(s3)); } }
أنشأنا متغير إسمه s1 و قيمته badria و أنشانا متغير ثاني إسمه s2 و قيمته Muhammad. ثم أنشأنا متغير ثالث إسمه s3 و خزننا به المتغير الأول و إستقطعنا منه أول حرفين عبر الدالة substring. ثم بعد ذلك طبعنا المتغير s3 و عند التنفيذ سيطبع لنا كلمة ja لأنه إستقطع أو تجاهل اول حرفين بعدما حددناهم له.
ja
مثال 4
قم بإنشاء متغيرين نصيين الأول قيمته badria والثاني قيمته Muhammad ثم قم بإستقطاع جزء. من المتغير الثاني من 1 حتى 4 من السلسلة النصية عبر الدالة substring بمعاملين.
package str; public class Str { public static void main(String[] args) { String s1="badria"; String s2="Muhammad"; String s3=s2.substring(1,4); System.out.println(s.length(s3)); } }
أنشأنا ثلاث متغيرات الأول تم تخزين به القيمة badria و المتغير الثاني تم تخزين به القيمة Muhammad. ثم أنشانا متغير ثالث s3 و قلنا له إستقطع من المتغير s2 من 1 حتى 4 أي يبدأ من الأندكس الأول و يتوقف عند الأندكس الرابع. وعند التنفيذ سيطبع لنا uha و تجاهل باقي الكلام.
uha
دالة charAt في جافا
دالة charAt() هي دالة من الدوال النصية التي تُستخدم لمعالجة السلاسل النصية و هي تقوم بإستقطاع حرف حسب الموقع أي تُعيد لنا قيمة من نوع char.
مثال 5
نفترض أن لدينا سلسلة نصية وهي AMVIIP إستقطع حرف من هذه السلسلة عبر الدالة charAt.
package str; public class Str { public static void main(String[] args) { String s="AMVIIP"; char c; c=s.charAt(4); System.out.println(c); } }
أنشأن متغير نصي و هو s و قيمته AMVIIP ثم عرّفنا متغير من نوع char و هو c ثم خزننا الناتج في c و قلنا له إطبع لنا الأندكس أو الحرف رقم 4 عبر دالة charAt. و عند التنفيذ ستكون النتيجة هي حرف a لأن موقعه رقم 4 من هذه السلسلة.
a
مثال 6
اوجد عدد الفراغات في سلسلة نصية مخزّنة في متغير نصي s و قيمته "Muhammad Alush" أوجد عدد الفراغات في هذه السلسلة و إطبع عددها.
package str; public class Str { public static void main(String[] args) { String s="Muhammad Alush"; char c; int count=0; for(int i=0;i<s.length();i++) { c=s.charAt(i); if(c==' ') count++; } System.out.println(count); } }
في بداية البرنامج قمنا بتعريف متغير نصي s و كانت قيمته هي "Muhammad Alush" و عرّفنا متغير نوعه char و إسمه c. ثم أنشأنا متغير عددي int إسمه count و القيمة 0 ثم دخلنا في حلقة تكرارية for و وضعنا شروط. في حال وجود فراغ يزودنا بعدد الفراغات الذي وجدها و يقوم بالزيادة على count بمقدار 1. و عند تشغيل البرنامج سوف يطبع لنا رقم 1 و هذا يعني أن في هذه السلسلة فراغ واحد فقط وهو فاصل بين الأسم و الكنية.
النص الديناميكي المرن StringBuffer
المقصود به النص المرن أو المتغير أو النص المتقلب يعني أن السلسلة التي تكون من نوع. StringBuffer تسمح لنا بتغييرها وتعديلها والتعامل معها بكل سهولة و مرونة. و أي سلسلة نصية تعرّف على أنها StringBuffer تمنحنا الكلاس و هي في الأساس كلاس يمنحنا الكثير من الدوال للتعامل مع السلاسل النصية.
مثال 7 دالة الإضافة append
package str; public class Str { public static void main(String[] args) { StringBuffer s=new StringBuffer("badria"); s.append("veil"); System.out.println(s); } }
في هذا المثال أنشأنا متغير s إسمه StringBuffer و القيمة badria ثم إستخدمنا الدالة append لإضافة. الكلمة veil لهذه السلسلة النصية ثم طبعنا السلسلة و ستكون النتيجة هي badriaveil.
badriaveil
مثال 8 الدالة إدخل insert
package str; public class Str { public static void main(String[] args) { StringBuffer s=new StringBuffer("badria"); s.insert(0, "veil"); System.out.println(s); } }
في هذا المثال إستخدمنا الدالة insert من أجل حشر كلمة veil في بداية السلسلة النصية badria والرقم 0 يعني إحشر كلمة veil في بداية السلسلة. و النتيجة ستكون veilbadria و في حال كتبنا رقم 1 سوف يضيفها بعد حرف s من إسم badria.
veilbadria
مثال 9 الدالة إستبدال replace
package str; public class Str { public static void main(String[] args) { StringBuffer s=new StringBuffer("ali"); s.replace(0,2, "badria"); System.out.println(s); } }
لدينا السلسلة النصية ali و نريد إستبدال جزء منها عبر الدالة replace, إستخدمنا الدالة replace. ثم حددنا الرقمين 0,2 يعني إستبدل لنا من الأندكس 0 حتى 2 بكلمة badria و عند التنفيذ سوف تكون النتيجة badriaali.
badriaali
مثال 10 عن الدالة حذف delete
package str; public class Str { public static void main(String[] args) { StringBuffer s=new StringBuffer("badria"); s.delete(0, 1); System.out.println(s); } }
في هذا المثال طلبنا من البرنامج الحذف من الـ 0 حتى 1 من السلسلة النصية المحددة عبر الدالة. delete ثم يطبع السلسلة, وستكون النتيجة هي dria لأنه حذف اول حرفين.
dria