두 문자열을 비교하는 방법 Java

⚡ 스마트 요약

두 문자열을 비교하기 Java 문자열의 동일성 또는 순서 일치를 확인하는 데는 여러 가지 방법이 있습니다. 이 자료에서는 문자열 비교, 객체 비교, compareTo, StringUtils 메서드, == 연산자, 그리고 사용자 지정 비교 메서드를 포함한 7가지 접근 방식을 예제와 함께 설명합니다.

  • 🟰 문자열 equals(): 두 문자열 값을 대소문자를 구분하여 동일 여부를 비교하고, 동일하면 true, 동일하면 false를 반환합니다.
  • 📦 객체는 equals()와 같습니다. 두 문자열을 안전하게 비교하며, 두 개의 null 값은 동일하게 처리합니다.
  • 🔤 compareTo(): 문자열을 사전순으로 비교하여 0, 음수 또는 양수를 반환합니다.
  • 🧰 StringUtils 메서드: Apache Commons의 equals() 및 equalsAny() 함수는 문자열을 비교하고 null 값을 적절하게 처리합니다.
  • ⚠️ == Opera토르: 객체의 내용이 아닌 참조를 비교하는 함수이므로 값 비교에는 사용해서는 안 됩니다.

두 문자열을 비교하는 방법 Java

문자열을 비교하는 방법 Java

Java 두 문자열을 비교하는 데 활용할 수 있는 다양한 방법을 제공합니다. Java. 문자열 비교 Java 일련의 문자를 문자열과 일치시키는 기능입니다.

문자열을 비교하는 방법을 배우려면 Java다음 클래스에서 제공하는 메서드를 사용할 수 있습니다.

  • java.lang 패키지의 문자열 클래스입니다.
  • java.util 패키지의 Objects 클래스입니다.
  • org.apache.commons.lang3 패키지의 StringUtils 클래스.

이들의 대부분은 Java 문자열 비교 메서드에는 대소문자를 구분하지 않는 방법이 있습니다. 이 튜토리얼에서는 두 문자열을 비교하는 데 사용할 수 있는 다양한 메서드를 배우게 됩니다.

방법 1: 문자열 equals() 메서드

The Java 끈 같음() 메서드 두 개의 문자열 객체를 비교하여 문자열 값이 같은지 확인합니다.

구문 :

public boolean equals(Object anObject)

equals() 메소드 매개변수:

anObject – 문자열 비교를 위한 인수 문자열입니다.

equals() 메소드 반환 유형

  • 제공된 문자열 리터럴이 첫 번째 문자열과 동일한 경우 true를 반환합니다.
  • 첫 번째 문자열이 인수 문자열과 동일하지 않으면 false를 반환합니다.

예:

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

설명 :

  • 지정된 개체의 대소문자가 다르기 때문에 마지막 출력에서 ​​false가 반환되었습니다.

참고 : 대소문자를 구분하여 문자열을 비교하려면 `equals()` 메서드를 사용하십시오. 대소문자를 무시하고 문자열 객체를 비교하려면 `equalsIgnoreCase` 메서드를 사용하십시오.

방법 2: 객체의 equals() 메서드

The Java 객체가 같음() 이 메서드는 두 개의 문자열 객체를 비교하여 두 객체가 같은 값을 가지고 있는지 확인합니다.

구문 :

public static boolean equals(Object a, Object b)

equals() 메소드 매개변수

a – 첫 번째 문자열 객체에 대한 인수 문자열입니다.

b – 두 번째 문자열 객체에 대한 인수 문자열입니다.

equals() 메소드 반환 유형

  • 문자열 리터럴이 동일하면 true를 반환합니다. 두 인수에 null 값을 전달하면 true가 반환됩니다.
  • 문자열 리터럴이 동일하지 않으면 false를 반환합니다.

예:

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

설명 :

이 예시에서 볼 수 있듯이, 비교된 문자열이 같으므로 출력값은 true라는 부울 값입니다.

방법 3: 문자열 CompareTo() 메서드

The Java 문자열 비교() 방법은 두 개의 문자열을 알파벳 순서로 비교합니다. 일반적으로 사전식 순서라고 합니다.

구문 :

public int compareTo(String str)

CompareTo() 메서드 매개변수

str – 현재 문자열과 비교할 문자열입니다.

CompareTo() 메서드가 반환됩니다.

  • 0 – 지정된 객체가 현재 문자열과 같은 경우 XNUMX을 반환합니다.
  • < 0 – 이 문자열이 지정된 개체보다 작은 경우 XNUMX보다 작은 숫자를 반환합니다.
  • > 0 – 이 문자열이 제공된 문자열을 초과하는 경우 XNUMX보다 큰 숫자를 반환합니다.

예:

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

설명 :

첫 번째 결과는 첫 번째 문자열과 두 번째 문자열이 같으므로 0을 반환합니다.

두 번째 결과는 문자가 다르기 때문에 32라는 값을 반환합니다.

참고 : 대소문자를 구분하지 않으려면 "compareToIgnoreCase" 메서드를 사용할 수 있습니다.

방법 4: StringUtils equals() 메서드

The Java StringUtils는 같음() 이 방법은 두 문자 시퀀스의 동일성을 비교합니다.

프로그램에 "org.apache.commons.lang3" 라이브러리를 추가했는지 확인하십시오. 이렇게 하면 StringUtils 메서드를 사용하여 문자열을 비교할 수 있습니다.

Maven 프로젝트의 경우 이것을 사용하십시오 안내 프로젝트에 라이브러리를 추가합니다.

하지만 빌드 도구 없이 라이브러리를 추가하려면 다음을 사용하세요. 안내.

구문 :

public static boolean equals(CharSequence cs1, CharSequence cs2)

StringUtils equals() 메서드 매개변수

  • cs1 – 첫 번째 인수에 대한 문자 시퀀스입니다.
  • cs2 – 두 번째 인수에 대한 문자 시퀀스입니다.

StringUtils는 equals() 메소드를 반환합니다.

  • 문자열 비교 결과가 같으면 true를 반환합니다. 두 인수에 null 값을 전달하는 경우에도 동일하게 적용됩니다.
  • 문자열 비교가 동일하지 않으면 false를 반환합니다.

예:

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

설명 :

첫 번째 문자열과 두 번째 문자열의 내용이 동일하므로 결과는 true를 반환합니다.

대소문자를 무시하려면 "equalsIgnoreCase" 메소드를 사용할 수 있습니다.

방법 5: StringUtils equalsAny() 방법

The Java StringUtils는 Any()와 같습니다. 메서드는 인수에 문자열이 있는지 확인합니다.

구문 :

public static boolean equalsAny(CharSequence string, CharSequence... searchStrings)

StringUtils는 equalsAny() 메소드 매개변수

  • 문자열 – 첫 번째 인수의 문자열 값입니다. 인수는 널값을 가질 수도 있습니다.
  • searchStrings – 첫 번째 인수 문자열이 있는지 확인하기 위한 메서드의 문자열 인수 집합입니다.

StringUtils는 equalsAny() 메소드를 반환합니다.

  • 일치하는 문자열이 변수 개수의 검색 문자열에 존재하면 true를 반환합니다. 두 인수가 모두 null인 경우에도 적용됩니다.
  • 일치시킬 문자열이 검색 문자열의 가변 개수에 있는 어떤 문자열과도 일치하지 않는 경우 false를 반환합니다.

예:

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

설명 :

첫 번째 문자열과 두 번째 문자열의 내용이 동일하므로 결과는 true를 반환합니다. 대소문자를 무시하려면 "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

설명 :

  • 첫 번째 결과는 부울 값인 true를 반환합니다. 내용이 같은 문자열은 동일한 문자열 풀에 추가되므로 하나의 주소를 공유합니다.
  • 두 번째 결과는 부울 값인 false를 반환합니다. 객체의 내용이 서로 다르기 때문에 문자열 풀도 다릅니다. 즉, 문자열이 서로 다른 객체 참조를 가지고 있으므로 출력은 false입니다.

방법 7: 두 문자열을 비교하는 사용자 정의 방법 만들기 Java

사전식 순서를 사용하여 두 문자열을 비교하는 메서드를 만듭니다.

구문 :

public static int compareTwoStrings(String str1, String str2)

사용자 정의 방법 매개변수

  • str1 – 비교할 문자열입니다.
  • str2 – 비교할 문자열입니다.

사용자 정의 메소드 반환

  • 0 – 첫 번째 문자열이 두 번째 문자열과 같으면 XNUMX을 반환합니다.
  • < 0 – 첫 번째 문자열이 두 번째 문자열보다 작은 경우 XNUMX보다 작은 숫자를 반환합니다.
  • > 0 – 첫 번째 문자열이 두 번째 문자열보다 큰 경우 XNUMX보다 큰 숫자를 반환합니다.

예:

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

설명 :

결과는 XNUMX 값을 반환했습니다. 이는 사용자 정의 함수가 예상대로 작동하고 있음을 의미합니다.

자주 묻는 질문

네. AI 비서는 사용자의 목표에 따라 equals, compareTo 또는 StringUtils를 추천하고, 흔히 발생하는 == 연산자 오류를 알려줄 수 있습니다. 하지만 특정 데이터에 대한 테스트를 통해 해당 함수 선택이 적절한지 확인하는 것이 좋습니다.

네. AI 도구는 내용 비교 시 '==' 연산자의 오용을 감지하고 대신 'equals' 또는 'equalsIgnoreCase'를 사용하도록 제안합니다. 이는 문자열을 다루는 초보자들이 흔히 범례를 구분하지 못하는 미묘한 오류를 줄이는 데 도움이 됩니다.

== 연산자는 객체의 내용이 아닌 참조를 비교합니다. 값이 같은 두 문자열이라도 서로 다른 참조를 가질 수 있으므로 == 연산자는 false를 반환할 수 있습니다. 정확한 값 비교를 위해서는 equals() 연산자를 사용하십시오.

equals() 메서드는 대소문자를 구분합니다. 따라서 "Guru"99"와 "GURU99"는 같지 않습니다. equalsIgnoreCase() 메서드는 대소문자를 구분하지 않고 문자열을 비교하여 둘 다 참이면 true를 반환합니다.

이 게시물을 요약하면 다음과 같습니다.