Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مقارنة السلاسل النصية

جزء من قسم Fundamentals في رحلة Java على Coddy — الدرس 70 من 73.

في لغة Java، لا تعد مقارنة السلاسل النصية (strings) بسيطة مثل مقارنة أنواع البيانات الأولية (primitive data types) مثل الأعداد الصحيحة أو الأحرف. لا يمكنك استخدام المعامل == لمقارنة السلاسل النصية من حيث التساوي لأن السلاسل النصية هي كائنات (objects)، وسيقوم == بمقارنة عناوين الذاكرة الخاصة بها، وليس محتوياتها. بدلاً من ذلك، تحتاج إلى استخدام طرق (methods) محددة توفرها فئة String لمقارنة الأحرف الفعلية داخل السلاسل النصية.

فيما يلي الطرق الأساسية لمقارنة السلاسل النصية:

  • equals(Object other): يقارن السلسلة النصية بكائن آخر (عادةً ما يكون سلسلة نصية أخرى). يعيد true إذا كانت السلاسل النصية تحتوي على نفس الأحرف وبنفس الترتيب، و false خلاف ذلك. هذه الطريقة حساسة لحالة الأحرف.
  • equalsIgnoreCase(String other): مشابه لـ equals، ولكنه يتجاهل حالة الأحرف. يعيد true إذا كانت السلاسل النصية تحتوي على نفس الأحرف، بغض النظر عن حالة الأحرف، و false خلاف ذلك.
  • compareTo(String other): يقارن بين سلسلتين نصيتين معجمياً (بناءً على قيم Unicode الخاصة بهما). يعيد القيمة 0 إذا كانت السلسلتان متساويتين، ورقماً سالباً إذا كانت السلسلة الأولى أصغر من الثانية، ورقماً موجباً إذا كانت السلسلة الأولى أكبر من الثانية. هذه الطريقة حساسة لحالة الأحرف.
  • compareToIgnoreCase(String other): مشابه لـ compareTo، ولكن يتجاهل حالة الأحرف.

إليك مثال:

String str1 = "hello";
String str2 = "hello";
String str3 = "HELLO";
String str4 = "world";

boolean eq1 = str1.equals(str2); // صحيح
boolean eq2 = str1.equals(str3); // خطأ
boolean eq3 = str1.equalsIgnoreCase(str3); // صحيح

int cmp1 = str1.compareTo(str2); // 0
int cmp2 = str1.compareTo(str4); // قيمة سالبة
int cmp3 = str4.compareTo(str1); // قيمة موجبة
int cmp4 = str1.compareToIgnoreCase(str3); // 0
challenge icon

التحدي

سهل

أنشئ دالة باسم compareStrings تأخذ سلسلتين نصيتين كمدخلات وتجري المقارنات التالية:

  1. تتحقق مما إذا كانت السلسلتان متساويتين باستخدام equals وتطبع النتيجة.
  2. تتحقق مما إذا كانت السلسلتان متساويتين (مع تجاهل حالة الأحرف) باستخدام equalsIgnoreCase وتطبع النتيجة.
  3. تقارن بين السلسلتين باستخدام compareTo وتطبع النتيجة.
  4. تقارن بين السلسلتين (مع تجاهل حالة الأحرف) باستخدام compareToIgnoreCase وتطبع النتيجة.

مثال على المخرجات للسلسلتين المدخلتين HELLO و hello:

HELLO equals hello: false
HELLO equalsIgnoreCase hello: true
HELLO compareTo hello: -32
HELLO compareToIgnoreCase hello: 0

ورقة مرجعية

في لغة Java، استخدم طرقًا (methods) محددة لمقارنة السلاسل النصية، وليس معامل == الذي يقارن عناوين الذاكرة:

  • equals(Object other): مقارنة التساوي مع مراعاة حالة الأحرف
  • equalsIgnoreCase(String other): مقارنة التساوي دون مراعاة حالة الأحرف
  • compareTo(String other): مقارنة معجمية مع مراعاة حالة الأحرف (تعيد 0 إذا كانت متساوية، وقيمة سالبة إذا كانت الأولى < الثانية، وقيمة موجبة إذا كانت الأولى > الثانية)
  • compareToIgnoreCase(String other): مقارنة معجمية دون مراعاة حالة الأحرف
String str1 = "hello";
String str2 = "HELLO";

boolean eq1 = str1.equals(str2); // false
boolean eq2 = str1.equalsIgnoreCase(str2); // true

int cmp1 = str1.compareTo(str2); // قيمة موجبة
int cmp2 = str1.compareToIgnoreCase(str2); // 0

جرّب بنفسك

import java.util.Scanner;

public class Main {
    public static void compareStrings(String str1, String str2) {
        // اكتب الكود الخاص بك هنا
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str1 = scanner.nextLine();
        String str2 = scanner.nextLine();
        compareStrings(str1, str2);
    }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Fundamentals