كيفية مقارنة سلسلتين في Java
طرق مقارنة السلاسل في Java
Java يوفر طرقًا مختلفة يمكنك الاستفادة منها لمقارنة سلسلتين Java. مقارنة السلسلة في Java هي ميزة تطابق سلسلة من الأحرف مع سلسلة.
لمعرفة كيفية مقارنة السلاسل في Javaيمكنك استخدام الطرق التي توفرها الفئات التالية.
- فئة السلسلة من Javaحزمة لانج.
- فئة الكائنات من Javaحزمة .util.
- فئة StringUtils من الحزمة org.apache.commons.lang3.
معظم هذه Java أساليب مقارنة السلاسل لديها حلول لتجاهل الحالة. في هذا Java في هذا البرنامج التعليمي، سوف تتعلم الطرق المختلفة التي يمكنك استخدامها لمقارنة سلسلتين.
الطريقة الأولى: طريقة السلسلة تساوي ().
أكثر من Java خيط يساوي () الأسلوب مقارنة بين كائنين من السلسلة للحصول على قيم سلسلة متساوية.
بناء الجملة:
public boolean equals(Object anObject)
يساوي () معلمات الطريقة:
anObject – سلسلة الوسيطة لمقارنة السلاسل.
يساوي () أنواع الإرجاع
- يُرجع صحيحًا إذا كانت السلسلة الحرفية المقدمة هي نفس السلسلة الأولى.
- إرجاع خطأ إذا كانت السلسلة الأولى ليست هي نفس سلسلة الوسيطة.
على سبيل المثال:
public class CompareTwoStrings {
public static void main(String[] args) {
String stringOne = "Guru99";
String stringTwo = "Guru99";
System.out.println("is Guru99 equal to Guru99: "+stringOne.equals(stringTwo));
String stringThree = "GURU99";
System.out.println("is Guru99 equal to GURU99: "+stringOne.equals(stringThree));
}
}
الناتج المتوقع:
is Guru99 equal to Guru99: true is Guru99 equal to GURU99: false
التفسير:
- لقد حصلت على خطأ في الإخراج الأخير لأن الكائن المحدد له حالة مختلفة.
ملاحظات: استخدم طريقة يساوي السلسلة لمقارنة سلسلة حساسة لحالة الأحرف. استخدم طريقة "equalsIgnoreCase" لمقارنة كائنات السلسلة بقيم سلسلة مختلفة.
الطريقة الثانية: الكائنات تساوي طريقة ().
أكثر من Java الكائنات تساوي () تقوم الطريقة بمقارنة كائنين من السلسلة لمعرفة ما إذا كان لديهما نفس القيم.
بناء الجملة:
public static boolean equals(Object a, Object b)
يساوي () معلمات الأسلوب
أ - سلسلة وسيطة لكائن السلسلة الأول.
ب - سلسلة وسيطة لكائن السلسلة الثانية.
يساوي () أنواع الإرجاع
- يُرجع صحيحًا إذا كانت القيم الحرفية للسلسلة متساوية. سيؤدي تمرير قيمة فارغة في الوسيطتين إلى إرجاع صحيح أيضًا.
- إرجاع خطأ إذا كانت السلسلة الحرفية غير متساوية.
على سبيل المثال:
import java.util.Objects;
public class CompareTwoStrings {
public static void main(String[] args) {
String stringOne = "Guru99";
String stringTwo = "Guru99";
System.out.println("is Guru99 equal to Guru99: " + Objects.equals(stringOne, stringTwo));
String stringThree = null;
String stringFour = null;
System.out.println("is Guru99 equal to Guru99: " + Objects.equals(stringThree, stringFour));
}
}
الإخراج:
is Guru99 equal to Guru99: true is Guru99 equal to Guru99: true
التفسير:
من هذا المثال، يمكنك أن ترى أن الإخراج هو قيمة منطقية صحيحة لأن السلاسل المقارنة متساوية.
الطريقة الثالثة: طريقة مقارنة السلسلة ().
أكثر من Java سلسلة مقارنة إلى () تقارن هذه الطريقة بين سلسلتين حسب الترتيب الأبجدي. وعادة ما يشار إليها بالترتيب المعجمي.
بناء الجملة:
public int compareTo(String str)
معلمات طريقة CompareTo()
str - السلسلة المراد مقارنتها بالسلسلة الحالية.
تُرجع طريقة المقارنة إلى ().
- 0 - يُرجع صفرًا إذا كان الكائن المحدد يساوي السلسلة الحالية.
- < 0 – إرجاع رقم أقل من الصفر إذا كانت هذه السلسلة أقل من الكائن المحدد.
- > 0 - يُرجع رقمًا أكبر من الصفر إذا تجاوزت هذه السلسلة السلسلة المتوفرة.
على سبيل المثال:
public class CompareTwoStrings {
public static void main(String[] args) {
String stringOne = "Guru99";
String stringTwo = "Guru99";
System.out.println("is Guru99 equal to Guru99: " + stringOne.compareTo(stringTwo));
String stringThree = "GURU99";
// u = 117, U = 85, result = 117-85 = 32
System.out.println("is Guru99 equal to GURU99: " + stringOne.compareTo(stringThree));
}
}
الناتج المتوقع:
is Guru99 equal to Guru99: 0 is Guru99 equal to GURU99: 32
التفسير:
تُرجع النتيجة الأولى قيمة صفر نظرًا لأن السطرين الأول والثاني متساويان.
تُرجع النتيجة الثانية قيمة اثنين وثلاثين نظرًا لاختلاف الأحرف.
ملحوظة: لتجاهل الحالات، يمكنك استخدام طريقة "compareToIgnoreCase".
الطريقة الرابعة: طريقة StringUtils يساوي ().
أكثر من Java StringUtils يساوي () تقارن الطريقة بين المساواة بين تسلسلين من الأحرف.
تأكد من إضافة مكتبة "org.apache.commons.lang3" إلى برنامجك. سيسمح لك هذا بمقارنة السلاسل باستخدام أساليب StringUtil.
بالنسبة لمشاريع Maven، استخدم هذا توجيه لإضافة المكتبة إلى المشروع.
ومع ذلك، إذا كنت تريد إضافة المكتبة دون أي أدوات بناء، فاستخدم هذا توجيه.
بناء الجملة:
public static boolean equals(CharSequnce cs1, CharSequence cs2)
StringUtils يساوي معلمات الطريقة ().
- cs1 – سلسلة من الأحرف للوسيطة الأولى.
- cs2 – سلسلة من الأحرف للوسيطة الثانية.
تُرجع طريقة StringUtils يساوي ()
- يُرجع صحيحًا إذا كانت مقارنة السلسلة متساوية. ينطبق ذلك إذا قمت بتمرير قيمة فارغة في الوسيطتين.
- إرجاع خطأ إذا كانت مقارنة السلسلة غير متساوية.
على سبيل المثال:
import org.apache.commons.lang3.StringUtils;
public class CompareTwoStrings {
public static void main(String[] args) {
String stringOne = "Guru99";
String stringTwo = "Guru99";
System.out.println("is Guru99 equal to Guru99: " + StringUtils.equals(stringOne, stringTwo));
String stringThree = "GURU99";
System.out.println("is Guru99 equal to GURU99: " + StringUtils.equals(stringOne, stringThree));
}
}
الإخراج:
is Guru99 equal to Guru99: true is Guru99 equal to GURU99: false
التفسير:
وبما أن محتويات السلسلتين الأولى والثانية متساوية، فإن النتيجة تعود صحيحة.
يمكنك استخدام طريقة "equalsIgnoreCase" لتجاهل الحالة.
الطريقة الخامسة: طريقة StringUtils يساويAny()
أكثر من Java StringUtils يساويAny() تتحقق الطريقة من وجود سلسلة في الوسائط.
بناء الجملة:
public static boolean equalsAny(CharSequence string, Charsequence… searchStrings)
معلمات الأسلوب StringUtils يساويAny()
- سلسلة - قيمة السلسلة للوسيطة الأولى. يمكن أن تحتوي الوسيطة أيضًا على قيمة فارغة.
- searchStrings - مجموعة من وسيطات السلسلة للطريقة لمعرفة ما إذا كانت سلسلة الوسيطة الأولى موجودة.
تُرجع طريقة StringUtilsequalsAny()
- يُرجع صحيحًا إذا كانت السلسلة المراد مطابقتها موجودة في العدد المتغير لسلاسل البحث. ينطبق هذا إذا كانت كلتا الوسيطتين فارغتين.
- إرجاع خطأ إذا كانت السلسلة المراد مطابقتها لا تتطابق مع أي سلسلة في العدد المتغير لسلاسل البحث.
على سبيل المثال:
import org.apache.commons.lang3.StringUtils;
public class CompareTwoStrings {
public static void main(String[] args) {
String stringOne = "Guru99";
String[] stringTwo = new String[] {
"Guru99",
"JavaGuru99"
};
System.out.println("is Guru99 available: " +
StringUtils.equalsAny(stringOne, stringTwo));
String[] stringThree = new String[] {
"GURU99",
"JavaGuru99"
};
System.out.println("is GURU99 available: " +
StringUtils.equalsAny(stringOne, stringThree));
}
}
الإخراج:
is Guru99 available: true is GURU99 available: false
التفسير:
وبما أن محتويات السلسلة الأولى والسلسلة الثانية متساوية، فإن النتيجة ترجع صحيحة. يمكنك استخدام طريقة "equalsAnyIgnoreCase" لتجاهل الحالة.
الطريقة 6: استخدام عامل ==
يتحقق عامل == على السلاسل من أن مراجع الكائنات لها نفس العنوان.
على سبيل المثال:
public class CompareTwoStrings {
public static void main(String[] args) {
String stringOne = "Guru99";
String stringTwo = "Guru99";
System.out.println("is Guru99 == to Guru99: " + (stringOne == stringTwo));
String stringThree = "GURU99";
System.out.println("is Guru99 == to GURU99: " + (stringOne == stringThree));
}
}
الناتج المتوقع:
is Guru99 == to Guru99: true is Guru99 == to GURU99: false
التفسير:
- تُرجع النتيجة الأولى قيمة منطقية صحيحة. تتم إضافة السلاسل التي لها نفس المحتويات إلى نفس تجمع السلاسل ومن ثم تشترك السلسلة في عنوان واحد.
- النتيجة الثانية ترجع قيمة منطقية كاذبة. تحتوي الكائنات على محتويات مختلفة، مما يؤدي إلى تجمعات سلسلة أخرى. وهذا يعني أن السلاسل لها مراجع كائنات منفصلة؛ وبالتالي فإن الإخراج كاذب.
الطريقة السابعة: إنشاء طريقة مخصصة لمقارنة سلسلتين Java
إنشاء طريقة لمقارنة سلسلتين باستخدام الترتيب المعجمي.
بناء الجملة:
public static int compareTwoStrings(String str1, String str2)
معلمات الطريقة المخصصة
- str1 - السلسلة المراد مقارنتها.
- str2 - السلسلة المراد المقارنة بها.
إرجاع الطريقة المخصصة
- 0 - يُرجع صفرًا إذا كانت السلسلة الأولى مساوية للسلسلة الثانية.
- <0 - إرجاع رقم أقل من الصفر إذا كانت السلسلة الأولى أقل من السلسلة الثانية.
- > 0 – إرجاع رقم أكبر من الصفر إذا كانت السلسلة الأولى أكبر من السلسلة الثانية.
على سبيل المثال:
public class CompareTwoStrings {
public static int compareTwoStrings(String stringOne, String stringTwo) {
int lengthOfStringOne = stringOne.length();
int lengthOfStringTwo = stringTwo.length();
int minStringLength = Math.min(lengthOfStringOne, lengthOfStringTwo);
for (int i = 0; i < minStringLength; i++) {
char stringOneCharValue = stringOne.charAt(i);
char stringTwoCharValue = stringTwo.charAt(i);
if (stringOneCharValue != stringTwoCharValue) {
return stringOneCharValue - stringTwoCharValue;
}
}
if (lengthOfStringOne != lengthOfStringTwo) {
return lengthOfStringOne - lengthOfStringTwo;
} else {
return 0;
}
}
public static void main(String[] args) {
String stringOne = "Guru99";
String stringTwo = "Guru99";
System.out.println("is Guru99 equal to Guru99: " + compareTwoStrings(stringOne, stringTwo));
}
}
الناتج المتوقع:
is Guru99 equal to Guru99: 0
التفسير:
أرجعت النتيجة قيمة صفر، مما يعني أن الوظيفة المخصصة تعمل كما هو متوقع.
ملخص:
أكثر من Java تعتمد طريقة مقارنة سلسلتين التي يجب استخدامها على العوامل التالية.
- الرغبة في السيطرة على طريقتك. في هذه الحالة، قم بإنشاء أسلوب مخصص.
- لا يمكنك استخدام الرمز القديم. مع Java 6 وأقل.
- الطريقة التي لديها الأداء الأمثل.
- نوع البيانات التي تعمل معها. على سبيل المثال، مطابقة سلسلة من مجموعة من الوسائط المتغيرة.
- الميزات التي توفرها المكتبة الخارجية. على سبيل المثال، توفر مكتبة StringUtils طرقًا مختلفة لمقارنة السلاسل.
