Java - String 클래스 compareTo() 메서드

춤추는개발자·2022년 11월 27일
0

Java 정리

목록 보기
30/59

int compareTo(String str)

  • 두개의 값을 비교하여 int형 값을 반환해주는 메서드 입니다.
  • 입력되는 매개변수 str과 사전순으로 비교하여 같으면 0 사전순으로 이전이면 음수, 이후면 양수를 반환 합니다.

그럼 직접 코드를 작성해 결과를 확인해 봅시다.

class JavaExercise_56 {
    public static void main(String[] args) { 
        String str1 = "hello";
        String str2 = "hallo";
        System.out.println(str1.compareTo(str2));
        System.out.println("aas".compareTo("hdw"));
        System.out.println("bew".compareTo("jsd"));
    }
}

출력 결과 :
4
-7
-8

위의 결과를 보고 그 의미를 모르시는 분들은 응? 뭐지? 라는 생각이 드실 겁니다. 저도 그랬습니다. 사전순이라고 한다면... hello와 hallo를 비교할때 첫 문자 h는 같으니까 다음 문자를 비교해 e보다 a가 사전순으로 더 앞에 있으니까 양수가 나오겠다는 예상은 해봤습니다. 근데 대체 저 반환되는 int형 값은 뭘 반환하는거지? 라는 생각이 드실 겁니다.
그 이유를 한국인 속도로 알려 드리겠습니다.

반환 값을 결정 하는 방법은 두가지가 있습니다.

  1. 비교대상에 문자열이 포함되어 있을 경우
    매개변수로 입력되는 문자열 즉 비교대상 문자열이 기본값 문자열에 포함이 되어 있다면

    기본값 문자열의 길이 - 비교대상 문자열의 길이 = 반환 값

으로 값이 반환 됩니다. 코드로 확인 해 봅시다.

class JavaExercise_56 {
    public static void main(String[] args) { // String 클래스의 다양한 메서드 실습2
        String str1 = "hello";
        String str2 = "he";
        String str3 = "l";
        System.out.println(str1.compareTo(str2));
        System.out.println(str1.compareTo(str3));
    }
}
출력 결과 : 
3
-4

위의 출력 결과를 보면 엥? str1과 str2를 비교한 값은 길이의 차의 값이 반환된것을 확인할 수 있는데 str1과 str3를 비교한 값은 이상한 값이 반환된 것을 확인 할 수 있습니다.

여기서 또 알아야 할 것이 있습니다. compareTo() 함수는 순서대로 같은 자리에 있는 문자를 비교 합니다. str1과 str3는 str3가 str1에 포함되긴하지만 같은 문자열의 위치가 다릅니다.순서대로 비교하다가 다른 문자가 나오면 아스키값의 차(기준값 문자열 - 비교대상 문자열)를 반환 하게 됩니다.

  1. 비교대상에 문자열이 포함되어 있지 않을 경우
    이 경우는 위에 기준값의 문자열에 비교대상 문자열이 포함되지만 같은 위치가 다를때의 경우와 같습니다. 문자열을 비교하다가 같은 위치에 서로 다른 문자가 있다면 두 문자의 아스키값의 차(기준값 문자열 - 비교대상 문자열)를 반환하게 됩니다.

추가) 숫자를 비교하는 compareTo() 메서드

숫자를 비교하는 compareTo() 메서드도 문자열 메서드와 마찬가지로 int형 값을 반환하는데 값이 같으면 0, 기준값이 비교대상 값보다 크다면 1, 기준값이 비교대상 값보다 작다면 -1을 반환 합니다.

class JavaExercise_56 {
    public static void main(String[] args) { 
        Integer x = 3;
        Integer y = 10;
        System.out.println(x.compareTo(y));
        System.out.println(x.compareTo(3));
        System.out.println(x.compareTo(2));
        Float f = 1.5f;
        System.out.println(f.compareTo(0.6f));
        int a = 3;
        int b = 10;
        System.out.println(Integer.compare(a,b));


    }
}
출력 결과 : 
-1
0
1
1
-1

위의 결과를 보면 잘 출력된 것을 확인할 수 있습니다. 숫자 기본형 타입은 모두 비교할 수 있으며 wrapper class를 사용하지 않고 primitive type인 int형을 쓰면 위와 같이 값을 비교할 수 있다.

0개의 댓글