[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 & JSP' 카테고리의 다른 글
[Java] Java와 Spring의 싱글톤 차이 (0) | 2021.09.29 |
---|---|
[Java] 객체 정렬 - Comparable, Comparator (0) | 2021.07.16 |
(이미지 삽입 예정)[Java] Java의 객체지향 - JVM, JRE, JDK / 자바 프로그램 구동 형태 (0) | 2020.10.29 |
[Java] 제어자 (0) | 2019.01.17 |
[Java] 접근 제어자(access modifier) (0) | 2019.01.17 |