Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

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

ในการเปรียบเทียบ Strings เพื่อความเท่าเทียมกัน คุณควรใช้ equals ของวัตถุ String หรือ equalsIgnoreCase วิธีการ เราจะเห็นด้วยว่าทำไมเราจึงไม่ควรใช้ == ตัวดำเนินการเพื่อเปรียบเทียบสตริง

การเปรียบเทียบสตริงกับวิธีเท่ากับ ()

หากเราต้องการเปรียบเทียบสองสตริงใน java และสนใจเกี่ยวกับตัวพิมพ์ของสตริง เราสามารถใช้ equals() วิธีการ

ตัวอย่างเช่น ข้อมูลโค้ดต่อไปนี้จะกำหนดว่าสตริงสองอินสแตนซ์เท่ากันกับอักขระทั้งหมดรวมทั้งตัวพิมพ์เล็กหรือไม่:

public class CompareTwoStrings {

    public static void main(String[] args) {
        String firstString = "Test123";
        String secondString = "Test" + 123;
        String thirdString = "TEST123";

        if (firstString.equals(secondString)) {
            System.out.println("first and second strings are equal");
        }

        if (firstString.equals(thirdString)) {
            System.out.println("first and third string are equal");
        }
    }
}

เอาท์พุต:

first and second strings are equal
หมายเหตุ:คำสั่งพิมพ์ที่สองไม่ได้รับการดำเนินการเนื่องจากตัวพิมพ์ของ firstString และ thirdString ไม่ตรงกัน

การเปรียบเทียบสตริงกับวิธี equalsIgnoreCase()

หากเราต้องการเปรียบเทียบสองสตริงใน java แต่ไม่สนใจเกี่ยวกับตัวพิมพ์ของสตริง เราสามารถใช้ equalsIgnoreCase() วิธีการ

ตัวอย่างเช่น ในข้อมูลโค้ดข้างต้น หากเราแทนที่ .equals() ด้วย .equalsIgnoreCase() เมธอด จากนั้นสั่งพิมพ์ทั้งสองคำสั่ง:

public class CompareTwoStrings {

    public static void main(String[] args) {
        String firstString = "Test123";
        String secondString = "Test" + 123;
        String thirdString = "TEST123";

        if (firstString.equalsIgnoreCase(secondString)) {
            System.out.println("first and second strings are equal");
        }

        if (firstString.equalsIgnoreCase(thirdString)) {
            System.out.println("first and third string are equal");
        }
    }
}

เอาท์พุต:

    first and second strings are equal
    first and third string are equal

ที่เกี่ยวข้อง:

  • เหตุใดจึงแทนที่ toString() ใน Java
  • วิธีย้อนกลับสตริงใน Java
  • วิธีดึงตัวเลขออกจากสตริง
  • วิธีการแปลงสตริงเป็น Int ใน Java

อย่าใช้ตัวดำเนินการ ==เพื่อเปรียบเทียบสตริง

หมายเหตุ:เมื่อเปรียบเทียบสองสตริงใน java เราไม่ควรใช้ == หรือ != ผู้ประกอบการ

โอเปอเรเตอร์เหล่านี้ทดสอบการอ้างอิงจริง ๆ และเนื่องจากออบเจ็กต์ String หลายตัวสามารถเป็นตัวแทนของ String เดียวกันได้ การดำเนินการนี้จึงอาจให้คำตอบที่ผิดได้

ให้ใช้ String.equals(Object) . แทน เมธอด ซึ่งจะเปรียบเทียบออบเจ็กต์ String ตามค่าของวัตถุ

public class CompareTwoStrings {

    public static void main(String[] args) {
        String firstString = "Test123";
        String secondString = "Test123";
        String thirdString = new String("Test123");

        if (firstString == secondString) {
            System.out.println("first and second strings are equal");
        }

        if (firstString == thirdString) {
            System.out.println("first and third strings are equal");
        }
    }
}

เอาท์พุต:

    first and second strings are equal
หมายเหตุ:คำสั่งการพิมพ์ที่สองจะไม่ถูกดำเนินการ

การเปรียบเทียบสตริงกับค่าคงที่

เมื่อเปรียบเทียบสตริงกับค่าคงที่ คุณสามารถใส่ค่าคงที่ทางด้านซ้ายของเท่ากับ เพื่อให้แน่ใจว่าคุณจะไม่ได้รับ NullPointerException ถ้าสตริงอื่นเป็นโมฆะ

ตัวอย่างเช่น:

"baz".equals(foo)

ขณะที่ foo.equals("baz") จะโยน NullPointerException ถ้า foo เป็นโมฆะ "baz".equals(foo) จะประเมินเป็น false .

ทางเลือกอื่นที่อ่านง่ายกว่าคือการใช้ Objects.equals() ซึ่งทำการตรวจสอบค่าว่างทั้งสองพารามิเตอร์:

เช่น. Objects.equals(foo, "baz") .

การเปรียบเทียบสตริงในคำสั่งสวิตช์

สำหรับ Java 1.7 เป็นไปได้ที่จะเปรียบเทียบตัวแปร String กับตัวอักษรในคำสั่ง switch ตรวจสอบให้แน่ใจว่าสตริงไม่เป็นค่าว่าง มิฉะนั้นจะโยน NullPointerException . ค่าจะถูกเปรียบเทียบโดยใช้ String.equals , เช่น.

public class CompareTwoStrings {

    public static void main(String[] args) {
        String stringToSwitch = "A";
        
        switch (stringToSwitch) { 
            case "a":
                System.out.println("a");
                break; 
            
            case "A":
                System.out.println("A"); //the code goes here
                break; 
            
            case "B":
                System.out.println("B");
                break;
            
            default:
                break;
        }
    }
}

บทสรุป

ในโพสต์นี้ เราได้อธิบายวิธีเปรียบเทียบสตริงในจาวากับตัวอย่างโค้ด เมื่อตัวพิมพ์ของสตริงมีความสำคัญ เราควรใช้ .equals() และเมื่อปลอกไม่สำคัญ เราก็ควรใช้ .equalsIgnoreCase() .

นอกจากนี้ เราไม่ควรใช้ == ตัวดำเนินการเปรียบเทียบสตริง เช่น == ตัวดำเนินการตรวจสอบการอ้างอิงไม่ใช่ค่า