النصوص — الأساسيات
النصوص (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 هو فئة قابلة للتغيير لبناء النصوص بكفاءة. سنتعلمه في الدرس التالي.
📖 ملخص
- String غير قابلة للتغيير (Immutable)
- الوصول: charAt(index)، length()
- البحث: indexOf، contains، startsWith، endsWith
- القص: substring(start، end)
- التحويل: toLowerCase، toUpperCase، trim
- الاستبدال: replace، replaceAll
- التقسيم: split(delimiter)
- المقارنة: equals، compareTo
📝 تمارين
- عكس النص: اكتب دالة تعكس نصًا (مثل "مرحباً" → "ًاحبرم")
- عد الكلمات: اكتب دالة تعد عدد الكلمات في نص
- التحقق من Palindrome: اكتب دالة تتحقق مما إذا كان النص قراءة من اليمين واليسار متساوية
الدرس التالي
في الدرس التالي، سنتعلم StringBuilder — بناء النصوص بكفاءة.



