본문 바로가기

Java & JSP

[Java] compareTo 숫자, 문자열 비교

728x90
반응형
[Java] compareTo 숫자, 문자열 비교

 

compareTo

int compareTo(NumberSubClass referenceName)
int compareTo(String anotherString)

두 개의 값을 비교하여 int값으로 반환해주는 함수이다.
문자열의 비교, 숫자의 비교 방식이 존재한다.

 

 

숫자의 비교

public class CompareToTest{

    public static void main(String[] args){

        Integer x = 3;
        Integer y = 4;
        Double z = 1.0;

        System.out.println( x.compareTo(y) );  // -1
        System.out.println( x.compareTo(3) );  //  0
        System.out.println( x.compareTo(2) );  //  1
        System.out.println( z.compareTo(2.7) );  //  -1

    }

}

- 숫자형 WrapperClass인 숫자를 비교해야 한다. (결과 리턴은 int형)

- 기준(x)이 비교대상(y)보다 크면 1, 작으면 -1, 동일하면 0을 나타낸다.

 

* int를 비교대상으로 하고 싶은 경우

int x = 4;  int y = 5;
Integer.compare(x,y);

Integer.compare를 사용한다.

 

 

문자열의 비교

문자열을 비교하는 경우에는 기준이 숫자와 조금 다르다.

1) 비교대상에 동일한 문자열이 포함되어있는 경우
2) 비교대상과 문자열이 전혀 다른 경우
public class CompareToTest{
    public static void main(String[] args){

        String str = "abcd";

        // 1) 비교대상에 문자열이 포함되어있을 경우
        System.out.println( str.compareTo("abcd") );  // 0 (같은 경우는 숫자나 문자나 0을 리턴)
        System.out.println( str.compareTo("ab") );  //  2
        System.out.println( str.compareTo("a") );  //  3
        System.out.println( str.compareTo("c") );  //  -2       
        System.out.println( "".compareTo(str) );  //  -4

        // 2) 비교대상과 전혀 다른 문자열인 경우
        System.out.println( str.compareTo("zefd") );  //  -25
        System.out.println( str.compareTo("zEFd") );  //  -25
        System.out.println( str.compareTo("ABCD") );  //  32
    }

}

1) 비교대상 문자열이 포함되어있을 경우 (비교대상문자열이 기준문자열에 완전히 포함되는 문자열이어야 함)

- str.compareTo("abcd")

: 문자열이 일치하는 경우 숫자비교와 똑같이 0 리턴

- str.compareTo("ab"), str.compareTo("a")

: 기준값의 앞자리부터 일치하는 문자열이 포함된 경우 (기준문자열길이-비교대상문자열길이) 리턴
ex) "abcd"(4) - "ab"(2) = 2 반환 / "abcd"(4) - "a"(1) = 1 반환

- str.compareTo("c")

: 기준값의 앞자리부터 다르기 때문에 아스키 코드값의 차이값을 리턴
  * compareTo는 같은 위치의 문자를 비교한다.

예제에서는 첫번째 위치에서 비교가 실패했기 때문에 "a"와 "c"의 차이값을 리턴한다. (a=97,c=99 / a-c=-2)

ex) "abcd".compareTo("abfd") -> "ab" 까지 동일하므로 "c", "f" 아스키코드 차이를 리턴한다.

 

2) 비교대상과 전혀 다른 문자열인 경우

- str.compareTo("zefd")

: 위와 같은 논리로 첫 문자부터 다르므로 "a"와 "z"의 아스키코드 차이값 리턴

- str.compareTo("ABCD")

: "a"와 "A"의 아스키코드 차이값 리턴

* 대소문자구분 무시하고 비교하고 싶은 경우 compareToIgnorecase() 사용

 

 


정리

1. 기준값 - 대상값 로 비교한다고 생각하자.

2. 대상 문자열이 기준 문자열에 포함되는 관계이고 첫문자부터 동일할 경우 문자 길이의 차이(기준 - 대상)를 리턴한다.

2. 문자열이 다를 경우 다른 문자의 아스키코드로 비교하여 차이를 리턴한다.

 

 

참고

https://mine-it-record.tistory.com/133

 

[JAVA] 자바_compareTo ( 값 [문자열/숫자] 비교 )

- 자바 compareTo - -마지막 수정날짜 : 2021-01-01- 과거 기록한 글이나 보기 힘든 부분도 있고 잘못 작성된 부분이 있어 내용 일부분 수정하였습니다. (잘못된 내용이 있는부분 적어주시면 바로바로

mine-it-record.tistory.com

 

728x90
반응형