Spec-Zone.ru › OpenJDK 27

Класс BreakIterator

java.lang.Object
java.text.BreakIterator
Все реализуемые интерфейсы:
Cloneable
public abstract class BreakIterator extends Object implements Cloneable
Класс BreakIterator реализует методы для поиска расположения границ в тексте. Экземпляры BreakIterator хранят текущую позицию и сканируют текст, возвращая индексы символов, в которых расположены границы. Внутри BreakIterator сканирует текст с помощью CharacterIterator и поэтому может сканировать текст, хранящийся в любом объекте, реализующем этот протокол. Для сканирования объектов String, переданных в setText, используется StringCharacterIterator.

Для создания экземпляров различных типов итераторов границ используются фабричные методы этого класса. В частности, используйте getWordInstance, getLineInstance, getSentenceInstance и getCharacterInstance для создания BreakIterator, выполняющих анализ границ слов, строк, предложений и символов соответственно. Один BreakIterator может работать только с одной единицей (словом, строкой, предложением и т. д.). Для анализа границ каждой единицы необходимо использовать отдельный итератор.

Анализ границ строк определяет, где можно переносить текстовую строку при форматировании текста. Механизм корректно обрабатывает знаки препинания и слова, содержащие дефисы. При фактическом переносе строк также необходимо учитывать доступную ширину строки; эта задача решается программным обеспечением более высокого уровня.

Анализ границ предложений позволяет выбирать предложения с правильной интерпретацией точек внутри чисел и сокращений, а также завершающих знаков препинания, таких как кавычки и скобки.

Анализ границ слов используется функциями поиска и замены, а также в приложениях для редактирования текста, позволяющих пользователю выделять слова двойным щелчком. При выделении слов знаки препинания внутри слов и после них интерпретируются корректно. Символы, не являющиеся частью слова, например знаки и знаки препинания, имеют границы слов с обеих сторон.

Анализ границ символов позволяет пользователям взаимодействовать с символами ожидаемым образом, например перемещать курсор по текстовой строке. Анализ границ символов обеспечивает корректную навигацию по строкам символов независимо от того, как хранятся символы. Возвращаемые границы могут соответствовать дополнительным символам, последовательностям комбинируемых символов или кластерам лигатур. Например, символ с диакритическим знаком может храниться как базовый символ и диакритический знак. Представление о том, что считать символом, может различаться в разных языках.

Требования к реализации:
Реализация анализа границ символов по умолчанию соответствует правилам разбиения на расширенные графемные кластеры консорциума Unicode. Дополнительные сведения см. в разделе Границы графемных кластеров приложения № 29 к стандарту Unicode.
Примечание по реализации:
Реализации BreakIterator по умолчанию выполняют эквивалент вызова setText(""), если текст не был задан с помощью setText(String) или setText(CharacterIterator), а экземпляр BreakIterator вызвал операцию поиска границы. Экземпляры BreakIterator, возвращаемые фабричными методами этого класса, предназначены только для естественных языков, а не для текста на языках программирования. Однако можно определить подклассы для токенизации языка программирования.

Примеры:

Создание и использование границ текста:

public static void main(String args[]) {
     if (args.length == 1) {
         String stringToExamine = args[0];
         //print each word in order
         BreakIterator boundary = BreakIterator.getWordInstance();
         boundary.setText(stringToExamine);
         printEachForward(boundary, stringToExamine);
         //print each sentence in reverse order
         boundary = BreakIterator.getSentenceInstance(Locale.US);
         boundary.setText(stringToExamine);
         printEachBackward(boundary, stringToExamine);
         printFirst(boundary, stringToExamine);
         printLast(boundary, stringToExamine);
     }
}
Вывод каждого элемента в прямом порядке:
public static void printEachForward(BreakIterator boundary, String source) {
    int start = boundary.first();
    for (int end = boundary.next();
         end != BreakIterator.DONE;
         start = end, end = boundary.next()) {
         System.out.println(source.substring(start,end));
    }
}
Вывод каждого элемента в обратном порядке:
public static void printEachBackward(BreakIterator boundary, String source) {
    int end = boundary.last();
    for (int start = boundary.previous();
         start != BreakIterator.DONE;
         end = start, start = boundary.previous()) {
        System.out.println(source.substring(start,end));
    }
}
Вывод первого элемента:
public static void printFirst(BreakIterator boundary, String source) {
    int start = boundary.first();
    int end = boundary.next();
    System.out.println(source.substring(start,end));
}
Вывод последнего элемента:
public static void printLast(BreakIterator boundary, String source) {
    int end = boundary.last();
    int start = boundary.previous();
    System.out.println(source.substring(start,end));
}
Вывод элемента в указанной позиции:
public static void printAt(BreakIterator boundary, int pos, String source) {
    int end = boundary.following(pos);
    int start = boundary.previous();
    System.out.println(source.substring(start,end));
}
Поиск следующего слова:
public static int nextWordStartAfter(int pos, String text) {
    BreakIterator wb = BreakIterator.getWordInstance();
    wb.setText(text);
    int last = wb.following(pos);
    int current = wb.next();
    while (current != BreakIterator.DONE) {
        for (int p = last; p < current; p++) {
            if (Character.isLetter(text.codePointAt(p)))
                return last;
        }
        last = current;
        current = wb.next();
    }
    return BreakIterator.DONE;
}
(Итератор, возвращаемый методом BreakIterator.getWordInstance(), уникален тем, что возвращаемые им позиции границ не обозначают одновременно начало и конец итерируемого фрагмента. Иными словами, итератор границ предложений возвращает границы, каждая из которых обозначает конец одного предложения и начало следующего. Для итератора границ слов символы между двумя границами могут образовывать слово либо знаки препинания или пробельные символы между словами. В приведённом выше коде используется простая эвристика для определения того, какая граница является началом слова: если символы между этой границей и следующей содержат хотя бы одну букву (это может быть буква алфавита, иероглиф CJK, слог хангыль, символ каны и т. д.), то текст между этими границами является словом; в противном случае это текст между словами.)
С версии:
1.1
См. также:
  • CharacterIterator

Краткое описание полей

Модификатор и тип Поле Описание
static final int DONE
DONE возвращается методами previous(), next(), next(int), preceding(int) и following(int), когда достигнута первая или последняя граница текста.

Краткое описание конструкторов

BreakIterator()
Модификатор Конструктор Описание
protected
Конструктор.

Краткое описание методов

Модификатор и тип Метод Описание
Object clone()
Создаёт копию этого итератора
abstract int current()
Возвращает индекс символа текстовой границы, которая была возвращена последней вызовом next(), next(int), previous(), first(), last(), following(int) или preceding(int).
abstract int first()
Возвращает первую границу.
abstract int following(int offset)
Возвращает первую границу после указанного смещения символа.
static Locale[] getAvailableLocales()
Возвращает массив всех локалей, для которых методы get*Instance этого класса могут возвращать локализованные экземпляры.
static BreakIterator getCharacterInstance()
Возвращает новый экземпляр BreakIterator для границ символов для локали по умолчанию.
static BreakIterator getCharacterInstance(Locale locale)
Возвращает новый экземпляр BreakIterator для границ символов для указанной локали.
static BreakIterator getLineInstance()
Возвращает новый экземпляр BreakIterator для границ строк для локали по умолчанию.
static BreakIterator getLineInstance(Locale locale)
Возвращает новый экземпляр BreakIterator для границ строк для указанной локали.
static BreakIterator getSentenceInstance()
Возвращает новый экземпляр BreakIterator для границ предложений для локали по умолчанию.
static BreakIterator getSentenceInstance(Locale locale)
Возвращает новый экземпляр BreakIterator для границ предложений для указанной локали.
abstract CharacterIterator getText()
Возвращает сканируемый текст
static BreakIterator getWordInstance()
Возвращает новый экземпляр BreakIterator для границ слов для локали по умолчанию.
static BreakIterator getWordInstance(Locale locale)
Возвращает новый экземпляр BreakIterator для границ слов для указанной локали.
boolean isBoundary(int offset)
Возвращает true, если указанное смещение символа является границей текста.
abstract int last()
Возвращает последнюю границу.
abstract int next()
Возвращает границу, следующую за текущей.
abstract int next(int n)
Возвращает n-ю границу от текущей.
int preceding(int offset)
Возвращает последнюю границу перед указанным смещением символа.
abstract int previous()
Возвращает границу, предшествующую текущей.
void setText(String newText)
Задаёт новую текстовую строку для сканирования.
abstract void setText(CharacterIterator newText)
Задаёт новый текст для сканирования.

Методы, объявленные в классе Object

equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
boolean equals(Object obj)
Показывает, равен ли этот объект другому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии.
Финализация объявлена устаревшей и может быть удалена в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного времени.

Подробное описание полей

DONE

public static final int DONE
DONE возвращается методами previous(), next(), next(int), preceding(int) и following(int), когда достигнута первая или последняя граница текста.
См. также:
  • Значения констант полей

Подробное описание конструкторов

BreakIterator

protected BreakIterator()
Конструктор. BreakIterator не имеет состояния и поведения по умолчанию.

Подробное описание методов

clone

public Object clone()
Создаёт копию этого итератора
Переопределяет:
clone в классе Object
Возвращает:
Копию этого объекта
См. также:
  • Cloneable

first

public abstract int first()
Возвращает первую границу. Текущая позиция итератора устанавливается на первую границу текста.
Возвращает:
Индекс символа первой границы текста.

last

public abstract int last()
Возвращает последнюю границу. Текущая позиция итератора устанавливается на последнюю границу текста.
Возвращает:
Индекс символа последней границы текста.

next

public abstract int next(int n)
Возвращает n-ю границу от текущей. Если достигнута первая или последняя граница текста, возвращается BreakIterator.DONE, а текущая позиция устанавливается на первую или последнюю границу текста — в зависимости от того, какая из них достигнута. В противном случае текущая позиция итератора устанавливается на новую границу. Например, если текущая позиция итератора — m-я граница текста, а от текущей границы до последней границы текста есть ещё три границы, вызов next(2) вернёт m + 2. Новая позиция текста будет установлена на (m + 2)-ю границу текста. Вызов next(4) вернёт BreakIterator.DONE, а новой позицией текста станет последняя граница текста.
Параметры:
n — граница, которую нужно вернуть. Значение 0 ничего не меняет. Отрицательные значения перемещают итератор к предыдущим границам, а положительные — к последующим.
Возвращает:
Индекс символа n-й границы от текущей позиции или BreakIterator.DONE, если достигнута первая или последняя граница текста.

next

public abstract int next()
Возвращает границу, следующую за текущей. Если текущая граница является последней границей текста, возвращается BreakIterator.DONE, а текущая позиция итератора не меняется. В противном случае текущая позиция итератора устанавливается на границу, следующую за текущей.
Возвращает:
Индекс символа следующей границы текста или BreakIterator.DONE, если текущая граница является последней границей текста. Эквивалентно next(1).
См. также:
  • next(int)

previous

public abstract int previous()
Возвращает границу, предшествующую текущей. Если текущая граница является первой границей текста, возвращается BreakIterator.DONE, а текущая позиция итератора не меняется. В противном случае текущая позиция итератора устанавливается на границу, предшествующую текущей.
Возвращает:
Индекс символа предыдущей границы текста или BreakIterator.DONE, если текущая граница является первой границей текста.

following

public abstract int following(int offset)
Возвращает первую границу после указанного смещения символа. Если указанное смещение равно последней границе текста, возвращается BreakIterator.DONE, а текущая позиция итератора не меняется. В противном случае текущая позиция итератора устанавливается на возвращённую границу. Возвращаемое значение всегда больше смещения или равно значению BreakIterator.DONE.
Параметры:
offset — смещение символа, с которого начинается сканирование.
Возвращает:
Первая граница после указанного смещения или BreakIterator.DONE, если в качестве смещения передана последняя граница текста.
Вызывает исключение:
IllegalArgumentException — если указанное смещение меньше первой границы текста или больше последней границы текста.

preceding

public int preceding(int offset)
Возвращает последнюю границу перед указанным смещением символа. Если указанное смещение равно первой границе текста, возвращается BreakIterator.DONE, а текущая позиция итератора не меняется. В противном случае текущая позиция итератора устанавливается на возвращённую границу. Возвращаемое значение всегда меньше смещения или равно значению BreakIterator.DONE.
Параметры:
offset — смещение символа, с которого начинается сканирование.
Возвращает:
Последняя граница перед указанным смещением или BreakIterator.DONE, если в качестве смещения передана первая граница текста.
Вызывает исключение:
IllegalArgumentException — если указанное смещение меньше первой границы текста или больше последней границы текста.
С версии:
1.2

isBoundary

public boolean isBoundary(int offset)
Возвращает true, если указанное смещение символа является границей текста.
Параметры:
offset — проверяемое смещение символа.
Возвращает:
true, если «offset» является позицией границы, иначе false.
Вызывает исключение:
IllegalArgumentException — если указанное смещение меньше первой границы текста или больше последней границы текста.
С версии:
1.2

current

public abstract int current()
Возвращает индекс символа текстовой границы, которая была возвращена последней вызовом next(), next(int), previous(), first(), last(), following(int) или preceding(int). Если любой из этих методов возвращает BreakIterator.DONE, поскольку достигнута первая или последняя граница текста, возвращается первая или последняя граница текста — в зависимости от того, какая из них достигнута.
Возвращает:
Границу текста, возвращённую указанными выше методами, либо первую или последнюю границу текста.
См. также:
  • next()
  • next(int)
  • previous()
  • first()
  • last()
  • following(int)
  • preceding(int)

getText

public abstract CharacterIterator getText()
Возвращает сканируемый текст
Возвращает:
сканируемый текст

setText

public void setText(String newText)
Задаёт новую текстовую строку для сканирования. Текущая позиция сканирования сбрасывается на first().
Параметры:
newText — новый текст для сканирования.

setText

public abstract void setText(CharacterIterator newText)
Задаёт новый текст для сканирования. Текущая позиция сканирования сбрасывается на first().
Параметры:
newText — новый текст для сканирования.

getWordInstance

public static BreakIterator getWordInstance()
Возвращает новый экземпляр BreakIterator для границ слов для локали по умолчанию.
Возвращает:
Итератор границ слов

getWordInstance

public static BreakIterator getWordInstance(Locale locale)
Возвращает новый экземпляр BreakIterator для границ слов для указанной локали.
Параметры:
locale — требуемая локаль
Возвращает:
Итератор границ слов
Вызывает исключение:
NullPointerException — если locale имеет значение null

getLineInstance

public static BreakIterator getLineInstance()
Возвращает новый экземпляр BreakIterator для границ строк для локали по умолчанию.
Возвращает:
Итератор границ строк

getLineInstance

public static BreakIterator getLineInstance(Locale locale)
Возвращает новый экземпляр BreakIterator для границ строк для указанной локали.
Параметры:
locale — требуемая локаль
Возвращает:
Итератор границ строк
Вызывает исключение:
NullPointerException — если locale имеет значение null

getCharacterInstance

public static BreakIterator getCharacterInstance()
Возвращает новый экземпляр BreakIterator для границ символов для локали по умолчанию.
Возвращает:
Итератор границ символов

getCharacterInstance

public static BreakIterator getCharacterInstance(Locale locale)
Возвращает новый экземпляр BreakIterator для границ символов для указанной локали.
Параметры:
locale — требуемая локаль
Возвращает:
Итератор границ символов
Вызывает исключение:
NullPointerException — если locale имеет значение null

getSentenceInstance

public static BreakIterator getSentenceInstance()
Возвращает новый экземпляр BreakIterator для границ предложений для локали по умолчанию.
Возвращает:
Итератор границ предложений

getSentenceInstance

public static BreakIterator getSentenceInstance(Locale locale)
Возвращает новый экземпляр BreakIterator для границ предложений для указанной локали.
Параметры:
locale — требуемая локаль
Возвращает:
Итератор границ предложений
Вызывает исключение:
NullPointerException — если locale имеет значение null

getAvailableLocales

public static Locale[] getAvailableLocales()
Возвращает массив всех локалей, для которых методы get*Instance этого класса могут возвращать локализованные экземпляры. Возвращаемый массив представляет собой объединение локалей, поддерживаемых средой выполнения Java и установленными реализациями BreakIteratorProvider. Как минимум, возвращаемый массив должен содержать экземпляр Locale, равный Locale.ROOT, и экземпляр Locale, равный Locale.US.
Возвращает:
Массив локалей, для которых доступны локализованные экземпляры BreakIterator.

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзорные сведения, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API