어제 오늘 내일

[Java String] compareTo() vs compareToIgnoreCase() – 문자열 사전순 비교 본문

IT/Java

[Java String] compareTo() vs compareToIgnoreCase() – 문자열 사전순 비교

hi.anna 2025. 9. 19. 02:42

문자열이 같은지 여부만 비교하는 equals()와 달리, compareTo()는 두 문자열을 사전식(lexicographical) 순서로 비교합니다.
정렬, 검색, 정렬 기준(Comparator) 구현 등에 자주 쓰입니다.

 

1. compareTo()

public int compareTo(String anotherString)
  • 두 문자열을 비교하여 정수 값을 반환
    • 같으면 0
    • 현재 문자열이 더 앞서면 음수
    • 현재 문자열이 더 뒤면 양수
String s1 = "Apple";
String s2 = "Banana";
String s3 = "Apple";

System.out.println(s1.compareTo(s2)); // 음수 (Apple < Banana)
System.out.println(s2.compareTo(s1)); // 양수 (Banana > Apple)
System.out.println(s1.compareTo(s3)); // 0 (같음)

👉 compareTo()는 대소문자를 구분합니다. "Apple""apple"은 다른 값으로 취급됩니다.

System.out.println("Apple".compareTo("apple")); // 음수

 

2. compareToIgnoreCase()

public int compareToIgnoreCase(String str)
  • compareTo()와 동일하지만 대소문자를 구분하지 않음
String s1 = "Java";
String s2 = "java";

System.out.println(s1.compareTo(s2));           // 음수 (대문자 J < 소문자 j)
System.out.println(s1.compareToIgnoreCase(s2)); // 0 (대소문자 무시)

👉 대소문자 관계없이 알파벳 순서만 따질 때 유용합니다.

 

3. 정렬에 활용

compareTo()정렬 기준으로 자주 사용됩니다.

List<String> list = Arrays.asList("Banana", "apple", "Cherry");

Collections.sort(list); // 내부적으로 compareTo() 사용
System.out.println(list);

출력:

[Banana, Cherry, apple]

👉 기본 정렬은 대소문자를 구분하기 때문에 "apple"이 뒤로 갑니다.

대소문자 무시 정렬을 원한다면 String.CASE_INSENSITIVE_ORDER를 쓰거나 직접 compareToIgnoreCase()를 적용해야 합니다.

Collections.sort(list, String::compareToIgnoreCase);
System.out.println(list);

출력:

[apple, Banana, Cherry]

4

. 정리

  • compareTo() → 문자열 사전순 비교 (대소문자 구분)
  • compareToIgnoreCase() → 문자열 사전순 비교 (대소문자 무시)
  • 0 → 같음, 음수 → 앞섬, 양수 → 뒤섬
  • 정렬, 검색, Comparator 구현 시 자주 사용됨

👉 문자열을 사전순으로 비교할 땐 compareTo(), 대소문자 무시하고 비교할 땐 compareToIgnoreCase().

 

 

반응형
Comments