Java에서 두 문자열을 비교할 때 가장 널리 사용되는 방법은 compareTo() 메서드입니다. 이 메서드는 두 문자열을 사전순(lexicographical order)으로 비교하고 그 결과를 정수 값으로 반환합니다.
compareTo() 메서드 구문
int compareTo(Object o)
여기서 o는 현재 문자열과 비교할 객체입니다.
반환값의 의미
- 0 : 인수로 전달된 문자열이 현재 문자열과 사전순으로 같은 경우
- 0보다 작은 값 : 인수 문자열이 현재 문자열보다 사전순으로 더 큰(뒤에 오는) 경우
- 0보다 큰 값 : 인수 문자열이 현재 문자열보다 사전순으로 더 작은(앞에 오는) 경우
예제
다음 예제에서는 compareTo() 메서드로 세 개의 문자열을 서로 비교해 보겠습니다.
public class Demo {
public static void main(String args[]) {
String str1 = "Strings are immutable";
String str2 = new String("Strings are immutable");
String str3 = new String("Integers are not immutable");
int result = str1.compareTo(str2);
System.out.println(result);
result = str2.compareTo(str3);
System.out.println(result);
}
}실행 결과
0 10
str1과 str2는 내용이 완전히 동일하므로 0이 반환됩니다. 반면 str2와 str3를 비교하면 첫 번째 문자부터 다른데, 'S'(유니코드 83)와 'I'(유니코드 73)의 차이인 10이 반환되는 것입니다.
대소문자 무시하고 비교하기 – compareToIgnoreCase()
대소문자 차이를 무시한 채 두 문자열을 사전순으로 비교하려면 compareToIgnoreCase() 메서드를 사용합니다. 이 메서드는 지정된 문자열이 현재 문자열보다 큰지, 같은지, 작은지에 따라 각각 음의 정수, 0, 양의 정수를 반환합니다.
구문
int compareToIgnoreCase(String str)
여기서 str은 비교할 문자열입니다.
예제
다음 예제는 대소문자를 구분하지 않고 문자열을 비교하는 방법을 보여줍니다.
public class Demo {
public static void main(String args[]) {
String str1 = "Strings are immutable";
String str2 = "Strings are immutable";
String str3 = "Integers are not immutable";
int result = str1.compareToIgnoreCase(str2);
System.out.println(result);
result = str2.compareToIgnoreCase(str3);
System.out.println(result);
result = str3.compareToIgnoreCase(str1);
System.out.println(result);
}
}실행 결과
0 10 -10
세 번째 비교에서 결과가 -10인 이유는 str3("Integers...")가 str1("Strings...")보다 사전순으로 앞서기 때문입니다. 즉, 첫 글자 'I'와 'S'의 유니코드 차이만큼 음수가 반환됩니다.
정리
compareTo(): 대소문자를 구분하여 두 문자열을 사전순으로 비교compareToIgnoreCase(): 대소문자 차이를 무시하고 비교- 두 메서드 모두 문자열이 같으면 0을, 순서에 따라 음수 또는 양수를 반환
단순히 두 문자열이 같은지만 확인하려면 equals() 메서드를 사용하는 것이 좋고, 정렬이나 순서 비교가 필요하다면 compareTo() 계열 메서드를 사용하는 것이 적합합니다.