Spec-Zone .ru
спецификации, руководства, описания, API
След: Интернационализация
Урок: Работа с текстом
Раздел: Обнаружение текстовых Границ
Символьные Границы
Домашняя страница > Интернационализация > Работа с текстом

Символьные Границы

Вы должны определить местоположение символьных границ, если Ваше приложение позволяет конечному пользователю выделять отдельные символы или перемещать курсор через текст один символ за один раз. Создать a BreakIterator это определяет местоположение символьных границ, Вы вызываете getCharacterInstance метод, следующим образом:

BreakIterator characterIterator =
    BreakIterator.getCharacterInstance(currentLocale);

Этот тип BreakIterator обнаруживает границы между пользовательскими символами, не только символами Unicode.

Пользовательский символ может быть составлен больше чем из одного символа Unicode. Например, пользовательский символ ü может быть составлен, комбинируя символы Unicode \u0075 (u) и \u00a8 (¨). Это не лучший пример, однако, потому что символ ü может также быть представлен единственным символом Unicode \u00fc. Мы привлечем арабский язык для более реалистического примера.

На арабском языке слово для дома:

Арабская пиктограмма для Дома

Это слово содержит три пользовательских символа, но оно составляется из следующих шести символов Unicode:

String house = "\u0628" + "\u064e" + "\u064a" + "\u0652" + "\u067a" + "\u064f";

Символы Unicode в позициях 1, 3, и 5 в house строка является диакритическими знаками. Арабский язык требует диакритических знаков, потому что они могут изменить значения слов. Диакритические знаки в примере являются символами без интервалов, так как они появляются выше базовых символов. В арабском текстовом процессоре невозможно переместить курсор в экран однажды для каждого символа Unicode в строке. Вместо этого следует переместить это однажды для каждого пользовательского символа, который может быть составлен больше чем одним символом Unicode. Поэтому следует использовать a BreakIterator отсканировать пользовательские символы в строке.

Пример программы BreakIteratorDemo, создает a BreakIterator отсканировать арабские символы. Программа передает это BreakIterator, наряду с String объект, создаваемый ранее, к методу, называют listPositions:

BreakIterator arCharIterator = BreakIterator.getCharacterInstance(
                                   new Locale ("ar","SA"));
listPositions (house, arCharIterator);

listPositions метод использует a BreakIterator определять местоположение символьных границ в строке. Отметьте что BreakIteratorDemo присваивает определенную строку BreakIterator с setText метод. Программа получает первую символьную границу с first метод и затем вызывает next метод до константы BreakIterator.DONE возвращается. Код для этой подпрограммы следующие:

static void listPositions(String target, BreakIterator iterator) {
                
    iterator.setText(target);
    int boundary = iterator.first();

    while (boundary != BreakIterator.DONE) {
        System.out.println (boundary);
        boundary = iterator.next();
    }
}

listPositions метод распечатывает следующие граничные позиции для пользовательских символов в строке house. Отметьте, что позиции диакритических знаков (1, 3, 5) не перечисляются:

0
2
4
6

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

Предыдущая страница: О Классе BreakIterator
Следующая страница: Word Boundaries