النصوص — الأساسيات

النصوص (Strings) هي واحدة من أكثر أنواع البيانات استخدامًا في Java. في هذا الدرس، سنتعلم كيفية التعامل مع النصوص.

إنشاء النصوص

الطريقة 1: باستخدام Literal

JAVA
String greeting = "مرحباً";
String name = "أحمد";
String empty = "";

الطريقة 2: باستخدام new

JAVA
String greeting = new String("مرحباً");
String name = new String("أحمد");

الفرق بين الطريقتين

JAVA
String s1 = "مرحباً";
String s2 = "مرحباً";
String s3 = new String("مرحباً");

System.out.println(s1 == s2);  // true (نفس المرجع)
System.out.println(s1 == s3);  // false (مراجع مختلفة)
System.out.println(s1.equals(s3));  // true (نفس القيمة)

الوصول إلى الأحرف

JAVA
String text = "مرحباً";

// الوصول إلى حرف معين
char first = text.charAt(0);  // 'م'
char last = text.charAt(text.length() - 1);  // 'ا'

// طول النص
int length = text.length();  // 6

العمليات الأساسية

الربط (Concatenation)

JAVA
String firstName = "أحمد";
String lastName = "محمد";
String fullName = firstName + " " + lastName;  // "أحمد محمد"

// باستخدام concat
String fullName2 = firstName.concat(" ").concat(lastName);

تكرار النص (Java 11+)

JAVA
String repeated = "Ha".repeat(3);  // "HaHaHa"
String stars = "*".repeat(10);     // "**"

البحث في النص

indexOf — البحث عن موقع

JAVA
String text = "مرحباً بالعالم";

int pos1 = text.indexOf("بالعالم");  // 7
int pos2 = text.indexOf("غيرموجود");  // -1 (غير موجود)
int pos3 = text.indexOf("م");  // 0 (أول ظهور)

contains — التحقق من الوجود

JAVA
String text = "مرحباً بالعالم";

boolean has1 = text.contains("بالعالم");  // true
boolean has2 = text.contains("غيرموجود");  // false

startsWith و endsWith

JAVA
String filename = "document.pdf";

boolean isPDF = filename.endsWith(".pdf");  // true
boolean isDoc = filename.startsWith("doc");  // true

قص النصوص (Substring)

JAVA
String text = "مرحباً بالعالم";

// من الفهرس 7 إلى النهاية
String sub1 = text.substring(7);  // "بالعالم"

// من الفهرس 0 إلى 6
String sub2 = text.substring(0, 6);  // "مرحباً"

تحويل الحروف

JAVA
String text = "Hello World";

String lower = text.toLowerCase();  // "hello world"
String upper = text.toUpperCase();  // "HELLO WORLD"

إزالة المسافات

JAVA
String text = "  مرحباً  ";

String trimmed = text.trim();  // "مرحباً"
String stripped = text.strip();  // "مرحباً" (Java 11+)

استبدال النصوص

JAVA
String text = "مرحباً بالعالم";

String replaced1 = text.replace("عالم", "Java");  // "مرحباً بـJava"
String replaced2 = text.replaceAll("[aeiou]", "*");  // استبدال بتعبير نمطي

تقسيم النصوص

JAVA
String csv = "أحمد,محمد,علي";

// تقسيم بفاصلة
String[] names = csv.split(",");
// ["أحمد", "محمد", "علي"]

// تقسيم بمسافة
String sentence = "مرحباً بالعالم";
String[] words = sentence.split(" ");
// ["مرحباً", "بالعالم"]

تحويل الأنواع

رقم إلى نص

JAVA
int num = 42;
String text1 = String.valueOf(num);  // "42"
String text2 = Integer.toString(num);  // "42"
String text3 = "" + num;  // "42"

نص إلى رقم

JAVA
String text = "42";

int num1 = Integer.parseInt(text);  // 42
double num2 = Double.parseDouble("3.14");  // 3.14
boolean bool = Boolean.parseBoolean("true");  // true

مقارنة النصوص

JAVA
String s1 = "Hello";
String s2 = "Hello";
String s3 = "hello";

// مقارنة بالقيمة
System.out.println(s1.equals(s2));  // true
System.out.println(s1.equals(s3));  // false

// مقارنة بدون حساسية لحالة الأحرف
System.out.println(s1.equalsIgnoreCase(s3));  // true

// مقارنة ترتيبية
int cmp = s1.compareTo(s3);  // سالب (s1 < s3)

❓ أسئلة شائعة

س لماذا نستخدم equals بدلاً من ==؟
ج == يقارن المراجع (عناوين الذاكرة). equals يقارن القيم الفعلية.
س هل String قابلة للتغيير (Mutable)؟
ج لا، String غير قابلة للتغيير (Immutable). أي تعديل يُنشئ نصًا جديدًا.
س ما هو StringBuilder؟
ج StringBuilder هو فئة قابلة للتغيير لبناء النصوص بكفاءة. سنتعلمه في الدرس التالي.

📖 ملخص

📝 تمارين

  1. عكس النص: اكتب دالة تعكس نصًا (مثل "مرحباً" → "ًاحبرم")
  2. عد الكلمات: اكتب دالة تعد عدد الكلمات في نص
  3. التحقق من Palindrome: اكتب دالة تتحقق مما إذا كان النص قراءة من اليمين واليسار متساوية

الدرس التالي

في الدرس التالي، سنتعلم StringBuilder — بناء النصوص بكفاءة.

100%