Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 대소문자를 구분하지 않고 문자열 비교하는 방법

Java에서 문자열(String)을 비교하는 방법은 여러 가지가 있습니다. 각 방법마다 동작 방식과 용도가 다르기 때문에 상황에 맞는 메서드를 선택하는 것이 중요합니다.

1. compareTo() 메서드 사용

compareTo() 메서드는 두 문자열을 사전순(lexicographically)으로 비교합니다. 비교 기준은 문자열 내 각 문자의 유니코드(Unicode) 값이며, 현재 String 객체가 나타내는 문자 시퀀스와 인수로 전달된 문자열의 문자 시퀀스를 순서대로 비교합니다.

예제

import java.util.Scanner;
public class StringComparison {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter string1: ");
        String str1 = sc.next();
        System.out.println("Enter string2: ");
        String str2 = sc.next();
        int result = str1.compareTo(str2);
        if (result < 0) {
            System.out.println("str1 is not equal to str2");
        } else if (result == 0) {
            System.out.println("str1 is equal to str2");
        } else {
            System.out.println("str1 is not equal to str2");
        }
    }
}

실행 결과 1

Enter string1:
Hello
Enter string2:
Hello
str1 is equal to str2

실행 결과 2

Enter string1:
hello
Enter string2:
hi
str1 is not equal to str2

2. == 연산자 사용

== 연산자로도 두 문자열을 비교할 수 있습니다. 하지만 주의할 점은, == 연산자는 문자열의 값이 아니라 참조(reference)를 비교한다는 것입니다. 즉, 두 변수가 동일한 객체를 가리키는지 여부만 판단하므로, 실제 문자열 내용 비교에는 적합하지 않습니다.

예제

import java.util.Scanner;
public class StringComparison {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str1 = "hello";
        String str2 = "hello";
        if (str1 == str2 ){
            System.out.println("Both are equal");
        } else {
            System.out.println("Both are not equal");
        }
    }
}

실행 결과

Both are equal

위 예제에서 "Both are equal"이 출력되는 이유는 Java의 문자열 리터럴 풀(string pool) 덕분에 동일한 리터럴은 같은 객체를 공유하기 때문입니다. 그러나 new 키워드로 생성한 문자열 객체끼리는 == 연산자로 비교하면 false가 반환될 수 있으므로 항상 주의해야 합니다.

3. equals() 메서드 사용

String 클래스의 equals() 메서드는 문자열을 매개변수로 받아 현재 문자열과 비교합니다. 대소문자까지 포함하여 문자 시퀀스가 완전히 동일한 경우에만 true를 반환합니다.

예제

import java.util.Scanner;
public class StringComparison {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter string1: ");
        String str1 = sc.next();
        System.out.println("Enter string2: ");
        String str2 = sc.next();
        boolean bool = str1.equals(str2);
        if (bool) {
            System.out.println("Both are equal");
        } else {
            System.out.println("Both are not equal");
        }
    }
}

실행 결과 1

Enter string1:
Hello
Enter string2:
hello
Both are not equal

실행 결과 2

Enter string1:
Hello
Enter string2:
Hello
Both are equal

대소문자를 구분하지 않는 문자열 비교

대소문자 차이를 무시하고 문자열을 비교하고 싶다면 String 클래스의 equalsIgnoreCase() 메서드를 사용하면 됩니다. 이 메서드는 equals() 메서드와 유사하지만, 비교 시 대소문자를 구분하지 않는다는 점이 다릅니다.

예제

import java.util.Scanner;
public class StringComparison {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter string1: ");
        String str1 = sc.next();
        System.out.println("Enter string2: ");
        String str2 = sc.next();
        boolean bool = str1.equalsIgnoreCase(str2);
        if (bool) {
            System.out.println("Both are equal");
        } else {
            System.out.println("Both are not equal");
        }
    }
}

실행 결과

Enter string1:
Hello
Enter string2:
hello
Both are equal

정리

  • compareTo(): 두 문자열을 사전순으로 비교하며, 정렬 등에 활용됩니다.
  • == 연산자: 값이 아닌 참조(객체 주소)를 비교하므로 문자열 내용 비교에는 부적합합니다.
  • equals(): 대소문자를 포함한 문자열 내용을 정확히 비교합니다.
  • equalsIgnoreCase(): 대소문자를 무시하고 문자열 내용을 비교합니다.

사용자 입력 검증, ID·이메일 비교 등 대소문자 차이를 허용해야 하는 경우에는 equalsIgnoreCase()를 사용하는 것이 가장 안전하고 간편한 방법입니다.