วิธีเปรียบเทียบสองสตริงใน Java
⚡ สรุปอย่างชาญฉลาด
การเปรียบเทียบสตริงสองสตริงใน Java สามารถทำได้หลายวิธีที่ใช้จับคู่ลำดับของตัวอักษรเพื่อความเท่าเทียมกันหรือลำดับ เอกสารนี้อธิบายวิธีการเจ็ดวิธี รวมถึงการใช้เมธอด equals กับสตริง, equals กับออบเจ็กต์, compareTo, เมธอดของ StringUtils, ตัวดำเนินการ == และวิธีการเปรียบเทียบแบบกำหนดเอง โดยแต่ละวิธีจะมีตัวอย่างประกอบ

วิธีการเปรียบเทียบสตริงใน Java
Java จัดเตรียมวิธีการต่างๆ ที่คุณสามารถใช้ประโยชน์เพื่อเปรียบเทียบสองสตริงได้ Java- การเปรียบเทียบสตริงใน Java เป็นคุณลักษณะที่จับคู่ลำดับของอักขระกับสตริง
เพื่อเรียนรู้วิธีการเปรียบเทียบสตริง Javaคุณสามารถใช้วิธีการต่างๆ ที่มีอยู่ในคลาสต่อไปนี้ได้:
- คลาส String จากแพ็กเกจ java.lang
- คลาส Object จากแพ็กเกจ java.util
- คลาส StringUtils จากแพ็คเกจ org.apache.commons.lang3
ส่วนใหญ่เหล่านี้ Java เมธอด compare-strings มีวิธีแก้ปัญหาโดยไม่คำนึงถึงตัวพิมพ์ใหญ่เล็ก ในบทเรียนนี้ คุณจะได้เรียนรู้วิธีต่างๆ ที่คุณสามารถใช้ในการเปรียบเทียบสตริงสองสตริง
วิธีที่ 1: วิธีสตริงเท่ากับ ()
การขอ 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
คำอธิบาย:
- คุณได้รับค่าเท็จในเอาต์พุตล่าสุดเนื่องจากวัตถุที่ระบุมีตัวพิมพ์ที่แตกต่างกัน
หมายเหตุ ใช้เมธอด `equals()` สำหรับการเปรียบเทียบสตริงแบบคำนึงถึงตัวพิมพ์ใหญ่เล็ก และใช้เมธอด `equalsIgnoreCase` เพื่อเปรียบเทียบอ็อบเจ็กต์สตริงโดยไม่สนใจตัวพิมพ์ใหญ่เล็ก
วิธีที่ 2: วิธีการวัตถุเท่ากับ ()
การขอ Java วัตถุเท่ากับ() วิธีการเปรียบเทียบวัตถุสตริงสองตัวเพื่อค้นหาว่ามีค่าเดียวกันหรือไม่
ไวยากรณ์:
public static boolean equals(Object a, Object b)
เท่ากับ () พารามิเตอร์วิธีการ
a – สตริงอาร์กิวเมนต์สำหรับวัตถุสตริงแรก
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)); } }
Output:
is Guru99 equal to Guru99: true is Guru99 equal to Guru99: true
คำอธิบาย:
จากตัวอย่างนี้ คุณจะเห็นว่าผลลัพธ์ที่ได้คือค่าบูลีนจริง เนื่องจากสตริงที่นำมาเปรียบเทียบนั้นเท่ากัน
วิธีที่ 3: วิธีการสตริง CompareTo()
การขอ Java สตริงเปรียบเทียบถึง() วิธีการเปรียบเทียบสตริงสองสตริงตามลำดับตัวอักษร โดยทั่วไปเรียกว่าลำดับตามพจนานุกรม
ไวยากรณ์:
public int compareTo(String str)
พารามิเตอร์วิธีการ CompareTo()
str – สตริงที่จะเปรียบเทียบกับสตริงปัจจุบัน
ผลตอบแทนของวิธีการ CompareTo()
- 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” ได้
วิธีที่ 4: วิธีการ StringUtils เท่ากับ ()
การขอ Java StringUtils เท่ากับ () วิธีการเปรียบเทียบความเท่าเทียมกันของลำดับอักขระสองตัว
โปรดตรวจสอบให้แน่ใจว่าคุณได้เพิ่มไลบรารี “org.apache.commons.lang3” ลงในโปรแกรมของคุณแล้ว ไลบรารีนี้จะช่วยให้คุณสามารถเปรียบเทียบสตริงโดยใช้วิธีการของ StringUtils ได้
สำหรับโปรเจ็กต์ Maven ให้ใช้สิ่งนี้ ให้คำแนะนำ เพื่อเพิ่มไลบรารีให้กับโปรเจ็กต์
อย่างไรก็ตาม หากคุณต้องการเพิ่มไลบรารีโดยไม่ใช้เครื่องมือสร้างใดๆ ให้ใช้วิธีนี้ ให้คำแนะนำ.
ไวยากรณ์:
public static boolean equals(CharSequence cs1, CharSequence cs2)
StringUtils เท่ากับ () พารามิเตอร์วิธีการ
- cs1 – ลำดับของอักขระสำหรับอาร์กิวเมนต์แรก
- cs2 – ลำดับอักขระสำหรับอาร์กิวเมนต์ที่สอง
StringUtils เท่ากับ () วิธีการส่งคืน
- ส่งคืนค่า true หากการเปรียบเทียบสตริงเท่ากัน และจะใช้ได้ผลแม้ว่าคุณจะส่งค่า null ในอาร์กิวเมนต์ทั้งสองก็ตาม
- ส่งคืนค่าเท็จหากการเปรียบเทียบสตริงไม่เท่ากัน
ตัวอย่าง:
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)); } }
Output:
is Guru99 equal to Guru99: true is Guru99 equal to GURU99: false
คำอธิบาย:
เนื่องจากเนื้อหาของสตริงที่หนึ่งและที่สองเท่ากัน ผลลัพธ์จึงส่งกลับค่าจริง
คุณสามารถใช้เมธอด "equalsIgnoreCase" เพื่อละเว้นตัวพิมพ์ได้
วิธีที่ 5: StringUtils เท่ากับAny() วิธีการ
การขอ Java StringUtils เท่ากับAny() วิธีการตรวจสอบว่ามีสตริงอยู่ในข้อโต้แย้งหรือไม่
ไวยากรณ์:
public static boolean equalsAny(CharSequence string, CharSequence... searchStrings)
StringUtils เท่ากับพารามิเตอร์วิธีการ ()
- string – ค่าสตริงสำหรับอาร์กิวเมนต์แรก อาร์กิวเมนต์ยังสามารถมีค่าว่างได้
- searchStrings – ชุดของอาร์กิวเมนต์สตริงสำหรับวิธีการค้นหาว่ามีสตริงอาร์กิวเมนต์แรกอยู่หรือไม่
StringUtils เท่ากับวิธีการ () ส่งคืน
- ส่งคืนค่า true หากสตริงที่ต้องการจับคู่มีอยู่ในสตริงค้นหาจำนวนหนึ่ง โดยเงื่อนไขนี้จะใช้ได้แม้ว่าอาร์กิวเมนต์ทั้งสองจะเป็นค่าว่างก็ตาม
- ส่งกลับค่าเท็จหากสตริงที่จะจับคู่ไม่ตรงกับสตริงใดๆ ในหมายเลขตัวแปรของสตริงการค้นหา
ตัวอย่าง:
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)); } }
Output:
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
คำอธิบาย:
- ผลลัพธ์แรกจะส่งคืนค่าบูลีนเป็นจริง สตริงที่มีเนื้อหาเหมือนกันจะถูกเพิ่มเข้าไปในพูลสตริงเดียวกัน ดังนั้นสตริงเหล่านั้นจึงใช้ที่อยู่เดียวกัน
- ผลลัพธ์ที่สองจะส่งคืนค่าบูลีนเป็นเท็จ วัตถุทั้งสองมีเนื้อหาที่แตกต่างกัน ส่งผลให้มีพูลสตริงที่แตกต่างกัน ซึ่งหมายความว่าสตริงเหล่านั้นมีการอ้างอิงวัตถุแยกกัน ดังนั้นผลลัพธ์จึงเป็นเท็จ
วิธีที่ 7: การสร้างวิธีการแบบกำหนดเองเพื่อเปรียบเทียบสองสตริง 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
คำอธิบาย:
ผลลัพธ์ส่งคืนค่าเป็นศูนย์ ซึ่งหมายความว่าฟังก์ชันแบบกำหนดเองทำงานได้ตามที่คาดไว้
