💡 개요
오늘은 자바에서 문자열 비교에 사용되는 compareTo() 에 대해 정리해 보자.
📕 compareTo()
compareTo() 란 문자열을 사전순으로 비교할 때 사용되는 메서드이다.
여기서 말하는 사전 순이란? 각 문자열에 있는 문자를 차례대로 아스키코드를 기준으로 비교하는 것이다.
다음은 String s1과 s2 를 비교하는 코드이다.
int result = s1.compareTo(s2);
코드 실행 결과는 다음과 같다.
- 만약 s1과 s2이 같으면 0
- s1이 s2보다 사전순으로 뒤에 있으면 양수
- s1이 s2보다 사전순으로 앞에 있으면 음수
그리고 출력되는 수의 절댓값은 두 문자열에서 첫 번째로 다른 문자의 값 차이다.
apple vs banana
System.out.println("apple".compareTo("banana"));
[결과]
-1
위 코드 실행결과가 -1 인 이유는 “apple” 과 “banana” 에서 처음으로 다른 문자는 apple의 a 와 banana의 b이다.
두 문자의 차이는 1 이고, 앞에 있는 a가 사전 순으로 앞서기 때문에 -1이 리턴되는 것이다.
hello vs hi
System.out.println("hello".compareTo("hi"));
[결과]
-4
hello와 hi에서 처음으로 다른 문자는 hello의 e 와 hi의 i 이다.
e와 i의 순서 차이는 4이고, e가 사전순으로 더 앞서므로 -4가 리턴된다.
Hello vs hello
System.out.println("hello".compareTo("Hello"));
[결과]
32
위 코드의 실행 결과가 32인 이유는, 두 문자열에서 처음으로 다른 문자가 hello의 h와 Hello의 H 이기 때문이다.
참고로, compareTo()에선 대소문자도 모두 비교한다.
h와 H의 차이는 32이고, h가 H보다 사전순으로 뒤에 오기 때문에 32이가 리턴된다.
hello vs hell
System.out.println("hello".compareTo("hell"));
[결과]
1
다음은 비교하는 두 문자열의 길이가 다른 경우이다.
만약 끝까지 비교하기 전에 먼저 다른 문자가 나오는 경우엔 위의 예제처럼 동일하게 동작하지만, 끝까지 비교했는데 모두 같은 경우는 좀 다르다.
일단 사전순으로 보면 hello가 hell 보다 늦다.
하지만 hell 문자가 모두 끝났는데, hello의 o는 아직 남았으므로 1을 리턴한다.
다음은 기준 문자열이 더 짧은 경우이다.
System.out.println("hell".compareTo("hello"));
[결과]
-1
기준 문자열의 hell은 모두 종료되었지만 hello의 o는 남아있다.
그렇기 때문에 사전순으로 hell이 앞서는 것을 알 수 있기 때문에 -1이 리턴된다.
'개발 일기' 카테고리의 다른 글
[개발 일기] 2025.03.13 - @BeforeAll (0) | 2025.03.13 |
---|---|
[개발 일기] 2025.03.12 - filter에서 발생하는 예외 (0) | 2025.03.12 |
[개발 일기] 2025.03.10 - 날짜 데이터 타입 (0) | 2025.03.10 |
[개발 일기] 2025.03.09 - InnoDB (0) | 2025.03.09 |
[개발 일기] 2025.03.08 - MySQL과 웹 애플리케이션 (1) | 2025.03.08 |