مفهوم النصوص في جافا
نص: تعني String
في جافا, و النص عبارة عن مجموعة من الأحرف.
النوع String
عبارة عن كلاس و لاحظ أنه يبدأ بحرف كبير مثل إسم أي كلاس في جافا.
إذاً عندما نقوم بتعريف String
فنحن فعلياً نقوم بتعريف كائن, و لكننا نقول له متغير لأنه بشكل عام يسمح لنا بتخزين أي قيمة بداخله - كقيمة نصية - و لكنه في الأساس كائن نوعه String
و ليس متغير عادي.
طريقة تعريف String
أبسط طريقة و الأكثر إستخداماً هي تعريفه مثل متغير عادي.
مثال
String greeting = "Hello world!";
تذكر أنك حتى لو قمت بتعريفه مثل متغير عادي, سيعتبره المترجم كائن.
و مثل أي كائن, تستطيع إنشاء كائن نوعه String
من خلال الكلمة new
و من خلال الكونستركتور, و ستفهم معنى هاتين الكلمتين في دروس لاحقة.
الكلاس String
يحتوي على 13 كونستركتور يمكنك استخدامهم لوضع قيمة أولية في النص من خلال عدة مصادر, مثل من مصفوفة أحرف.
مثال
Main.java
public class Main {
public static void main(String[] args) {
// هنا قمنا بتعريف مصفوفة من الأحرف
char[] helloArray = { 'h', 'e', 'l', 'l', 'o' };
// من خلال الكونستركتور helloString هنا وضعنا محتوى مصفوفة الأحرف كنص للكائن
String helloString = new String(helloArray);
// helloString هنا قمنا بعرض قيمة الكائن
System.out.println( helloString );
}
}
سنحصل على النتيجة التالية عند التشغيل.
hello
مفهوم الـ Concatenation
Concatenation تعني إضافة محتوى نص على نص, أي كأنك تنسخ نص و تلصقه في نهاية نص آخر.
يمكنك تطبيق الـ Concatenation في جافا بطريقتين:
- بإستخدام العامل
+
.
- أو بإستدعاء الدالة
concat()
التي شرحناها لاحقاً في هذا الدرس.
في المثال التالي سنقوم بتعريف نصين و نعطيهم قيم, ثم سنعرف نص ثالث و نضع النصين السابقين فيه.
مثال
Main.java
public class Main {
public static void main(String[] args) {
String s1 = "welcome to "; // هنا قمنا بتعريف النص الأول
String s2 = "harmash.com"; // هنا قمنا بتعريف النص الثاني
String s3 = s1 + s2; // أضفنا قيمة النصين السابقين في النص الثالث
System.out.println( s3 ); // هنا عرضنا قيمة النص الثالث لنتأكد إذا تمت عملية الإضافة كما نريد
}
}
سنحصل على النتيجة التالية عند التشغيل.
welcome to harmash.com
مصطلحات مهمة لها علاقة بالتعامل مع النصوص في جافا
لنفترض أننا قمنا بتعريف String
إسمه welcome
و أعطيناه قيمة.
مثال
String welcome = "welcome to harmash.com";
سيتم تخزين محتوى النص في الذاكرة حرفاً حرفاً و بالترتيب و يبدأ بترقيمهم من الرقم 0 كما في هذه الصورة.

مصطلحات تقنية
- عدد أحرف الـ
String
يسمى length.
- رقم الخانة يسمى index.
- إذا قمنا بأخذ جزء من الـ
String
فهذا الجزء يسمى substring.
أنت كمبرمج يمكنك إستغلال أرقام الخانات لتصل لمحتوى النص و تفعل به ما تشاء.
هناك دوال كثيرة جاهزة في جافا للتعامل مع النصوص, عليك فقط فهم طريقة عملها و استخدامها.
مثال

دوال الكلاس String
في جافا
الكلاس String
هو كلاس جاهز في جافا, يحتوي على دوال كثيرة للتعامل مع محتوى النصوص, سواء للبحث عن أحرف أو كلمات أو جمل, تجزيء النص, تغيير الـ Case للأحرف, دمج النصوص إلخ..
سنقسم دوال الكلاس String
إلى 5 فئات أساسية كما في الجدول التالي:
- دوال للبحث (Searching)
- دوال للتجزيء (Substring)
- دوال للتبديل (Replacing)
- دوال للمقارنة (Comparison)
- دوال للمعالجة (Manipulation)
ملاحظة
الكلاس String
يعتبر Immutable class و هذا يعني أنك عندما تستدعي أي دالة على String
, لن تعدل محتوى الـ String
الذي قام باستدعائها, بل سترجع لك نسخة معدلة من هذا الـ String
و سيبقى الـ String
الأصلي كما هو.
إرشادات مهمة لمعالجة الأخطاء التي نواجهها عند التعامل مع النصوص في جافا
في حال وضعت رقم index غير موجود سيظهر لك الخطأ التالي
java.lang.StringIndexOutOfBoundsException: String index out of range
هذا الخطأ يعني أنك طلبت إرجاع قيمة خانة في الـ String
غير موجودة, أو أنك حاولت تبديل قيمة خانة في الـ String
هي في الأساس غير موجودة.
في الحالتين هذا يعني أنك خرجت عن مساحة الـ String
المحجوزة في الذاكرة.
إذاً في حال ظهر لك هذا الخطأ إعرف أنك إستخدمت رقم index أكبر من أرقام الـ index الموجودة في الـ String
, أو قد يكون رقم أصغر من صفر.
مثال
Main.java
public class Main {
public static void main(String[] args) {
String s = "java is amazing";
System.out.println( s.charAt(30) );
}
}
سنحصل على النتيجة التالية عند التشغيل.
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 30
هذا يعني أنك طلبت إرجاع قيمة خانة في الـ String
غير موجودة, و أظهر لنا أن الخانة رقم 30 تحديداً غير موجودة.