วิธีเปรียบเทียบสองสตริงใน Java

⚡ สรุปอย่างชาญฉลาด

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

  • 🟰 สตริงเท่ากับ(): เปรียบเทียบค่าสตริงสองค่าโดยคำนึงถึงตัวพิมพ์ใหญ่เล็ก และส่งคืนค่าจริงหรือเท็จ
  • 📦 วัตถุเท่ากับ(): เปรียบเทียบสตริงสองสตริงอย่างปลอดภัย โดยถือว่าค่าว่างสองค่าเท่ากัน
  • 🔤 compareTo(): เปรียบเทียบสตริงตามลำดับตัวอักษร โดยส่งค่ากลับเป็นศูนย์ จำนวนลบ หรือจำนวนบวก
  • 🧰 เมธอดของ StringUtils: ฟังก์ชัน equals() และ equalsAny() จาก Apache Commons เปรียบเทียบสตริงและจัดการค่าว่างได้อย่างเหมาะสม
  • ⚠️ == Operaทอร์: ฟังก์ชันนี้เปรียบเทียบการอ้างอิงของวัตถุ ไม่ใช่เนื้อหา ดังนั้นจึงไม่ควรใช้สำหรับการเปรียบเทียบค่า

วิธีเปรียบเทียบสองสตริงใน Java

วิธีการเปรียบเทียบสตริงใน 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

คำอธิบาย:

ผลลัพธ์ส่งคืนค่าเป็นศูนย์ ซึ่งหมายความว่าฟังก์ชันแบบกำหนดเองทำงานได้ตามที่คาดไว้

คำถามที่พบบ่อย

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

ใช่แล้ว เครื่องมือ AI จะตรวจจับการใช้เครื่องหมาย == ที่ไม่ถูกต้องในการเปรียบเทียบเนื้อหา และแนะนำให้ใช้ equals หรือ equalsIgnoreCase แทน ซึ่งจะช่วยลดข้อผิดพลาดเล็กน้อยเกี่ยวกับการเปรียบเทียบความเท่าเทียมกันที่มักเกิดขึ้นกับผู้เริ่มต้นใช้งานสตริง

ตัวดำเนินการ == ใช้เปรียบเทียบการอ้างอิงของอ็อบเจ็กต์ ไม่ใช่เนื้อหา สตริงสองสตริงที่มีค่าเดียวกันอาจมีการอ้างอิงที่แตกต่างกัน ดังนั้น == อาจคืนค่าเป็น false ควรใช้ equals() เพื่อการเปรียบเทียบค่าที่เชื่อถือได้

เมธอด equals() นั้นคำนึงถึงตัวพิมพ์ใหญ่เล็ก ดังนั้น “Guru“99” และ “GURU99” ไม่เท่ากัน เมธอด equalsIgnoreCase() จะเปรียบเทียบสตริงโดยไม่สนใจความแตกต่างของตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก และจะคืนค่า true สำหรับทั้งสองกรณี

สรุปโพสต์นี้ด้วย: