Java Programming

مقارنة السلاسل النصية في جافا: دليل شامل

Spread the love

توفر جافا عدة طرق لمقارنة السلاسل النصية، لكل منها نقاط قوتها ونقاط ضعفها. تعتمد أفضل طريقة على ما إذا كنت بحاجة إلى مقارنة حساسة لحالة الأحرف، أو كنت تتحقق من المساواة، أو تحتاج إلى تحديد الترتيب المعجمي. يوضح هذا الدليل أكثر الأساليب شيوعًا.

جدول المحتويات

  1. استخدام طريقة compareTo()
  2. عامل التشغيل ==
  3. طريقة equals()
  4. حساسية حالة الأحرف و equalsIgnoreCase()
  5. طريقة contentEquals()

1. مقارنة السلاسل النصية باستخدام compareTo()

توفر طريقة compareTo() مقارنة معجمية. إنها تُرجع:

  • 0: إذا كانت السلاسل متساوية.
  • قيمة سالبة: إذا سبقت السلسلة التي تستدعي الطريقة السلسلة الوسيطة معجميًا.
  • قيمة موجبة: إذا تلت السلسلة التي تستدعي الطريقة السلسلة الوسيطة معجميًا.

هذه المقارنة حساسة لحالة الأحرف؛ فالحروف الكبيرة تسبق الحروف الصغيرة.


String str1 = "apple";
String str2 = "banana";
String str3 = "Apple";

int result1 = str1.compareTo(str2); // result1 ستكون سالبة
int result2 = str1.compareTo(str3); // result2 ستكون سالبة (حساسة لحالة الأحرف)
int result3 = str1.compareTo("apple"); // result3 ستكون 0

2. عامل التشغيل ==

يقارن عامل التشغيل == المراجع، وليس محتوى السلسلة النصية. إنه يتحقق مما إذا كانت متغيرين سلسلتين يشيران إلى نفس موقع الذاكرة. هذا ليس عادةً السلوك المطلوب لمقارنة قيم السلسلة.


String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");

System.out.println(str1 == str2); // غالبًا ما تكون صحيحة بسبب تخزين السلاسل النصية
System.out.println(str1 == str3); // خاطئة (كائنات مختلفة)

في حين أن str1 == str2 غالبًا ما تُرجع true بسبب تخزين جافا للسلاسل النصية، فإن الاعتماد على ذلك غير موثوق. استخدم دائمًا equals() لمقارنة المحتوى.

3. طريقة equals()

طريقة equals() هي النهج الموصى به لمقارنة محتوى السلسلة. إنها تقارن الأحرف، بغض النظر عن مواقع الذاكرة.


String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");

System.out.println(str1.equals(str2)); // true
System.out.println(str1.equals(str3)); // true

4. حساسية حالة الأحرف و equalsIgnoreCase()

equals() حساسة لحالة الأحرف. “hello” و “Hello” يُعتبران مختلفين. للمقارنات غير الحساسة لحالة الأحرف، استخدم equalsIgnoreCase().


String str1 = "hello";
String str2 = "Hello";

System.out.println(str1.equals(str2)); // false
System.out.println(str1.equalsIgnoreCase(str2)); // true

5. طريقة contentEquals()

تشبه contentEquals() طريقة equals()، لكنها تسمح بمقارنة سلسلة نصية مع كائنات CharSequence أخرى (مثل StringBuffer أو StringBuilder).


String str1 = "hello";
StringBuffer str2 = new StringBuffer("hello");

System.out.println(str1.contentEquals(str2)); // true

هذا يوفر مرونة، ولكن لمقارنات السلسلة البسيطة، يُفضل استخدام equals() من أجل سهولة القراءة.

باختصار، اختر الطريقة المناسبة بناءً على احتياجاتك: compareTo() للترتيب المعجمي، و equals() للمساواة الحساسة لحالة الأحرف، و equalsIgnoreCase() للمساواة غير الحساسة لحالة الأحرف، و contentEquals() لمقارنة السلاسل مع كائنات CharSequence الأخرى. تجنب استخدام == لمقارنة محتوى السلسلة.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *