Spec-Zone .ru
спецификации, руководства, описания, API
След: Интернационализация
Урок: Работа с текстом
Раздел: Сравнение Строк
Настройка Правил Сопоставления
Домашняя страница > Интернационализация > Работа с текстом

Настройка Правил Сопоставления

Предыдущий раздел, обсужденный, как использовать предопределенные правила для локали, чтобы сравнить строки. Эти правила сопоставления определяют порядок сортировки строк. Если предопределенные правила сопоставления не удовлетворяют Ваши потребности, можно разработать свои собственные правила и присвоить их a RuleBasedCollator объект.

Специализированные правила сопоставления содержатся в a String объект, который передают к RuleBasedCollator конструктор. Вот простой пример:

String simpleRule = "< a < b < c < d";
RuleBasedCollator simpleCollator =  new RuleBasedCollator(simpleRule);

Для simpleCollator объект в предыдущем примере, a меньше чем b, который является меньше этим c, и т.д. simpleCollator.compare метод ссылается на эти правила, сравнивая строки. Полный синтаксис, используемый, чтобы создать правило сопоставления, более гибок и сложен чем этот простой пример. Для полного описания синтаксиса сошлитесь на документацию API для RuleBasedCollator class.

Пример, который следует за видами список испанских слов с двумя сортировально-подборочными машинами. Полный исходный код для этого примера находится в RulesDemo.java.

RulesDemo программа запускается, определяя правила сопоставления для английского и испанского языка. Программа сортирует испанские слова традиционным способом. Сортируя по традиционным правилам, буквы ch и ll и их эквиваленты верхнего регистра у каждого есть их собственные позиции в порядке сортировки. Эти символьные пары сравниваются, как будто они были одним символом. Например, ch виды как одна буква, после cz в порядке сортировки. Отметьте, как правила для этих двух сортировально-подборочных машин отличаются:

String englishRules = (
    "< a,A < b,B < c,C < d,D < e,E < f,F " +
    "< g,G < h,H < i,I < j,J < k,K < l,L " +
    "< m,M < n,N < o,O < p,P < q,Q < r,R " +
    "< s,S < t,T < u,U < v,V < w,W < x,X " +
    "< y,Y < z,Z");

String smallnTilde = new String("\u00F1");    // ñ
String capitalNTilde = new String("\u00D1");  // Ñ

String traditionalSpanishRules = (
    "< a,A < b,B < c,C " +
    "< ch, cH, Ch, CH " +
    "< d,D < e,E < f,F " +
    "< g,G < h,H < i,I < j,J < k,K < l,L " +
    "< ll, lL, Ll, LL " +
    "< m,M < n,N " +
    "< " + smallnTilde + "," + capitalNTilde + " " +
    "< o,O < p,P < q,Q < r,R " +
    "< s,S < t,T < u,U < v,V < w,W < x,X " +
    "< y,Y < z,Z");

Следующие строки кода создают сортировально-подборочные машины и вызывают программу сортировки:

try {
    RuleBasedCollator enCollator = new RuleBasedCollator(englishRules);
    RuleBasedCollator spCollator =
        new RuleBasedCollator(traditionalSpanishRules);

    sortStrings(enCollator, words);
    printStrings(words);
    System.out.println();

    sortStrings(spCollator, words);
    printStrings(words);
} catch (ParseException pe) {
    System.out.println("Parse exception for rules");
}

Программа сортировки, вызванная sortStrings, универсально. Это сортирует любой массив слов согласно правилам любого Collator объект:

public static void sortStrings(Collator collator, String[] words) {
    String tmp;
    for (int i = 0; i < words.length; i++) {
        for (int j = i + 1; j < words.length; j++) {
            if (collator.compare(words[i], words[j]) > 0) {
                tmp = words[i];
                words[i] = words[j];
                words[j] = tmp;
            }
        }
    }
}

Когда сортировано с английскими правилами сопоставления, массив слов следующие:

chalina
curioso
llama
luz

Сравните предыдущий список со следующим, который сортируется согласно традиционным испанским правилам сопоставления:

curioso
chalina
luz
llama

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Выполнение Независимых от локали Сравнений
Следующая страница: Улучшение Производительности Сопоставления