Skip to content

Справочник API: BreakIterator

Класс BreakIterator используется для определения границ в тексте (символы, слова, строки, предложения). Он необходим для реализации логики выделения текста, перемещения курсора и переноса строк, если вы не используете высокоуровневый API Paragraph.

Создание

Skija предоставляет фабричные методы для создания итераторов различных типов границ. При желании можно указать локаль (например, "en-US", "ja-JP").

java
// Границы слов (для выделения двойным щелчком)
BreakIterator words = BreakIterator.makeWordInstance();

// Границы предложений (для выделения тройным щелчком)
BreakIterator sentences = BreakIterator.makeSentenceInstance(Locale.GERMANY.toLanguageTag());

// Границы строк (для переноса строк)
BreakIterator lines = BreakIterator.makeLineInstance();

// Границы символов (для перемещения курсора, обработки графемных кластеров)
BreakIterator chars = BreakIterator.makeCharacterInstance();

Использование

  1. Установить текст: Назначьте текст для анализа.
  2. Итерация: Используйте next(), previous(), first(), last() для навигации по границам.
java
String text = "Hello, world! 🌍";
BreakIterator iter = BreakIterator.makeWordInstance();
iter.setText(text);

int start = iter.first();
for (int end = iter.next(); end != BreakIterator.DONE; start = end, end = iter.next()) {
    // Проверить, является ли этот диапазон словом (а не пробелом/знаком препинания)
    if (iter.getRuleStatus() != BreakIterator.WORD_NONE) {
        String word = text.substring(start, end);
        System.out.println("Word: " + word);
    }
}

Методы навигации

  • first(): Перемещает к началу текста. Возвращает 0.
  • last(): Перемещает к концу текста. Возвращает длину строки.
  • next(): Перемещает к следующей границе. Возвращает смещение или DONE.
  • previous(): Перемещает к предыдущей границе. Возвращает смещение или DONE.
  • following(offset): Перемещает к первой границе после заданного смещения.
  • preceding(offset): Перемещает к последней границе перед заданным смещением.
  • isBoundary(offset): Возвращает true, если смещение является границей.

Статус правила

Для итераторов слов getRuleStatus() сообщает, какой тип "слова" находится между текущей и предыдущей границей.

  • WORD_NONE: Пробел, знак препинания или символ.
  • WORD_NUMBER: Цифры.
  • WORD_LETTER: Буквы (не CJK).
  • WORD_KANA: Хирагана/Катакана.
  • WORD_IDEO: CJK идеограммы.