Справочник 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();Использование
- Установить текст: Назначьте текст для анализа.
- Итерация: Используйте
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 идеограммы.