RuleBasedCollator

RuleBasedCollator (규칙 기반 조합기)

간단하고 데이터 기반이며 테이블 방식의 조합(collation)을 제공하는 Collator의 구체 하위 클래스예요. 이 클래스로 커스터마이즈된 테이블 기반 Collator를 만들 수 있어요. RuleBasedCollator는 문자를 정렬 키(sort key)에 매핑해요.

출처: Java API Reference

본문

RuleBasedCollator는 효율성을 위해 몇 가지 제약이 있어요(더 복잡한 언어에는 다른 하위 클래스를 쓸 수 있어요).

  • <modifier>로 제어되는 특수 조합 규칙이 지정되면 전체 collator 객체에 적용돼요.
  • 언급되지 않은 모든 문자는 조합 순서의 맨 끝에 있어요.

조합 테이블은 조합 규칙 목록으로 구성되며, 각 규칙은 세 가지 형태 중 하나예요.

<modifier>
<relation> <text-argument>
<reset> <text-argument>

규칙 요소의 정의는 다음과 같아요.

  • Text-Argument — 특수 문자(공통 공백 문자 [0009-000D, 0020]과 규칙 문법 문자 [0021-002F, 003A-0040, 005B-0060, 007B-007E])를 제외한 임의의 문자 시퀀스예요. 그 문자들을 원한다면 작은따옴표로 감쌀 수 있어요(예: ampersand => '&'). 인용되지 않은 공백 문자는 무시돼요. 예를 들어 b cbc로 취급돼요.
  • Modifier — 특수 조합 규칙을 켜는 두 가지가 있어요.
    • '@' — 프랑스어처럼 악센트(보조 차이)의 역순 정렬을 켜요.
    • '!' — 태국어/라오어의 모음-자음 교환을 켜요. 이 규칙이 시행 중일 때 범위 \U0E40-\U0E44의 태국어 모음이 범위 \U0E01-\U0E2E의 태국어 자음보다 앞서거나, 범위 \U0EC0-\U0EC4의 라오어 모음이 범위 \U0E81-\U0EAE의 라오어 자음보다 앞서면 모음이 자음 뒤에 배치돼요.

규칙 예시

다음 규칙은 a(와 악센트 변형), b, c 순서를 정의해요.

String simple = "< a < b < c";
RuleBasedCollator collator = new RuleBasedCollator(simple);

악센트를 2차(secondary) 차이로 처리하려면 '@' 수정자를 앞에 붙여요.

String base = "< a, A < b, B < c, C";
RuleBasedCollator collator = new RuleBasedCollator(base);

compare(String, String)으로 문자열을 비교하고, getCollationKey(String)으로 CollationKey를 얻을 수 있어요. 형식이 잘못된 규칙이면 ParseException이 던져져요.

더 알아보기 (Learn more)

Java 공식 API