본문 바로가기
Java

Java 문자열 비교 compareTo, compareToIgnoreCase 메서드

by jayden-lee 2019. 4. 15.
728x90

Java에는 두 개의 문자열 값을 비교하여 int 형을 반환하는 메서드가 있다. 첫 번째는 compareTo 메서드이고, 두 번째는 compareToIgnoreCase 메서드이다. 두 메서드의 차이점은 비교할 때, 대소문자를 구분해서 비교하는지 여부이다. 이와 유사한 방식의 메서드로는 equals와 equalsIgnoreCase가 있다.

compareTo 메서드

compareTo 메서드는 두 개의 문자열 값이 필요하다. 기준 문자열과 비교 문자열이다. 아래 코드에서는 str1이 기준 문자열이며, str2가 비교 문자열이다. str1.compareTo(str2) 메서드의 반환 값은 자료형은 int 형이며 값은 31이다. 31이라는 숫자는 str1, str2 두 문자열의 char로 비교한 결과를 나타낸다.

 

"p"의 아스키 코드는 10진수로 112이며, "Q"의 아스키 코드는 10진수로 81이다. 따라서 31이 출력된다.

public class Main {
    public static void main(String[] args) {
        String str1 = "p";
        String str2 = "Q";

        // 31 출력
        System.out.println(str1.compareTo(str2));
    }
}

이번에는 비교하는 문자열의 길이를 다르게 해보자. str1 값은 "Qp", str2 값은 "Q"로 한다. 이전에 살펴본 예제에서는 두 개의 문자열의 char 타입으로 비교했었다. 아래 코드를 실행하면, 출력 값으로 1이 표시된다. 1은 비교하는 두 개의 문자열 길이가 다르므로 길이를 기준으로 "Qp"(2) - "Q"(1) 계산하여 나온 값이다.

public class Main {
    public static void main(String[] args) {
        String str1 = "Qp";
        String str2 = "Q";

        // 1 출력
        System.out.println(str1.compareTo(str2));
    }
}

compareToIgnoreCase 메서드

compareToIgnoreCase 메서드는 compareTo와 동일하게 두 개의 문자열을 비교하지만, 특별한 특징이 있다. 바로 대소문자를 구분하지 않는다는 것이다. 그래서 str1 값이 "p", str2 값이 "P"인 경우에 두 개의 문자열을 compareToIgnoreCase 메서드로 비교하면 결과 값으로는 0이 출력된다.

public class Main {
    public static void main(String[] args) {
        String str1 = "p";
        String str2 = "P";

        // 0 출력
        System.out.println(str1.compareToIgnoreCase(str2));
    }
}

댓글