일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 자바
- date
- IntelliJ
- js
- json
- input
- 정규식
- table
- 자바스크립트
- CSS
- ArrayList
- Eclipse
- javascript
- Button
- Visual Studio Code
- list
- windows
- html
- Java
- 문자열
- 테이블
- 배열
- Maven
- 이클립스
- 인텔리제이
- 이탈리아
- string
- vscode
- CMD
- Array
- Today
- Total
어제 오늘 내일
[Java] 문자열 사전순 비교 방법 (compareTo, 정렬, 대소문자 무시) 본문
프로그래밍을 하다 보면 문자열을 서로 비교하거나 정렬해야 할 때가 있습니다.
예를 들어,
- 학생 이름을 가나다순/알파벳 순으로 정렬
- 단어 목록을 정리
- 검색 기능에서 입력한 값과 비교
이럴 때 자바(Java)에서는 문자열을 사전순(lexicographical order) 으로 비교할 수 있는 여러 가지 방법을 제공합니다.
이번 글에서는 compareTo(), compareToIgnoreCase(), 그리고 대소문자 구분 없는 정렬의 확실한 방법까지 차근차근 살펴보겠습니다.
1. compareTo() 기본 사용법
자바에서 문자열 비교의 핵심은 compareTo() 메서드입니다.
이 메서드는 두 문자열을 비교해 정수(int) 값을 반환합니다.
- 음수(-) → 앞 문자열이 뒤 문자열보다 사전순으로 먼저 옴
- 0 → 두 문자열이 같음
- 양수(+) → 앞 문자열이 뒤 문자열보다 사전순으로 늦게 옴
예제 1: 문자열 두 개 비교
public class CompareExample1 {
public static void main(String[] args) {
String a = "apple";
String b = "banana";
int result = a.compareTo(b);
if (result < 0) {
System.out.println(a + " < " + b);
} else if (result == 0) {
System.out.println(a + " == " + b);
} else {
System.out.println(a + " > " + b);
}
}
}
실행 결과
apple < banana
👉 "apple"이 "banana"보다 사전에서 앞에 오므로 음수가 반환됩니다.
2. 대소문자 구분 없는 비교: compareToIgnoreCase()
기본적으로 compareTo()는 대소문자를 구분합니다.
즉 "Apple"과 "apple"은 서로 다른 문자열로 인식합니다.
예제 2: 대소문자 구분 비교
public class CompareExample2 {
public static void main(String[] args) {
String a = "Apple";
String b = "apple";
System.out.println(a.compareTo(b)); // 결과: -32
}
}
대문자 "A"와 소문자 "a"의 유니코드 값 차이 때문에 -32가 반환됩니다.
만약 대소문자를 무시하고 비교하고 싶다면 compareToIgnoreCase()를 사용합니다.
예제 3: 대소문자 무시 비교
public class CompareExample3 {
public static void main(String[] args) {
String a = "Apple";
String b = "apple";
System.out.println(a.compareToIgnoreCase(b)); // 결과: 0
}
}
실행 결과
0
👉 "Apple"과 "apple"을 동일한 문자열로 취급합니다.
3. 여러 문자열 정렬하기
문자열이 여러 개 있을 때는 정렬 기능을 활용하면 더 편리합니다.
자바에서는 Collections.sort()나 Arrays.sort()를 이용해서 문자열 리스트를 사전순으로 정렬할 수 있습니다.
예제 4: 기본 정렬
import java.util.*;
public class SortExample1 {
public static void main(String[] args) {
List<String> words = Arrays.asList("banana", "Apple", "cherry", "apple");
Collections.sort(words);
System.out.println("대소문자 구분 정렬: " + words);
}
}
실행 결과
대소문자 구분 정렬: [Apple, apple, banana, cherry]
👉 기본 정렬은 대문자가 소문자보다 먼저 나옵니다.
4. 대소문자 구분 없는 정렬
많은 분들이 String.CASE_INSENSITIVE_ORDER를 사용하면 대소문자 무시 정렬이 될 거라 생각하지만,
사실은 같은 단어일 때 원래 순서에 영향을 받습니다.
따라서 완전한 대소문자 무시 정렬을 원한다면, 문자열을 소문자나 대문자로 변환해서 정렬 기준으로 삼는 것이 가장 확실합니다.
예제 5: 대소문자 무시 정렬
import java.util.*;
public class SortExample2 {
public static void main(String[] args) {
List<String> words = Arrays.asList("banana", "Apple", "cherry", "apple", "Banana");
// 대소문자 무시 정렬 (추천 방식)
words.sort(Comparator.comparing(String::toLowerCase));
System.out.println("대소문자 무시 정렬 결과: " + words);
}
}
실행 결과
대소문자 무시 정렬 결과: [Apple, apple, banana, Banana, cherry]
👉 "Apple"과 "apple", "banana"와 "Banana"를 같은 단어로 취급하면서도 원본 값은 그대로 유지됩니다.
5. 정리
- 문자열 비교 기본: compareTo()
- 대소문자 무시 비교: compareToIgnoreCase()
- 리스트 정렬: Collections.sort() / Arrays.sort()
- 대소문자 무시 정렬: Comparator.comparing(String::toLowerCase)
이번 글의 핵심은 "문자열 비교와 정렬 시, 대소문자를 어떻게 다룰 것인가"입니다.
- 단순 비교에는 compareTo()
- 대소문자 무시는 compareToIgnoreCase()
- 여러 문자열 정렬은 Collections.sort()
- 진짜 대소문자 무시 정렬은 Comparator.comparing(String::toLowerCase)
이 네 가지를 기억해 두면 문자열을 다룰 때 혼란 없이 원하는 결과를 얻을 수 있습니다.
'IT > Java' 카테고리의 다른 글
[Java StringBuilder] delete() / deleteCharAt() – 문자열 삭제하기 (0) | 2025.08.22 |
---|---|
[Java 기초] Arrays.stream()으로 배열을 스트림으로 변환하기 (0) | 2025.08.22 |
[Java] 로또 번호 생성하기 (1) | 2025.03.22 |
[Java] 랜덤 문자열 생성하기 (0) | 2025.03.21 |
[Java] 중복되지 않는 난수 생성하기 (0) | 2025.03.20 |