Spec-Zone.ru › OpenJDK 24

Класс BreakIterator

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

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

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

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

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

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

Требования к реализации:
Реализация анализа границ символов по умолчанию соответствует правилам разбиения расширенных кластеров графем Консорциума Юникода. Для получения более подробной информации обратитесь к разделу «Границы кластера графем» в приложении Unicode Standard Annex #29: Границы кластера графем.
Примечание об реализации:
По умолчанию реализация 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(), уникален тем, что возвращаемые им позиции разрывов не представляют собой и начало, и конец того, что итерируется. То есть, итератор разбиения предложений возвращает разрывы, каждый из которых представляет собой конец одного предложения и начало следующего. С итератором разбиения слов символы между двумя границами могут составлять слово, или они могут быть знаками препинания или пробелами между двумя словами. Приведенный выше код использует простую эвристику для определения того, какая граница является началом слова: если символы между этой границей и следующей границей включают хотя бы одну букву (это может быть буква алфавита, иероглиф КЖ, слог Хангуля, символ Каны и т. д.), то текст между этой границей и следующей является словом; в противном случае это материал между словами.)
С:
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)
Устанавливает новый текст для сканирования.

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

equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

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

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, если "смещение" является позицией границы, 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()
Возвращает массив всех локальных языков, для которых методы этого класса могут возвращать локализованные экземпляры. Возвращаемый массив представляет собой объединение локальных языков, поддерживаемых Java runtime и установленными реализациями BreakIteratorProvider. По меньшей мере, возвращаемый массив должен содержать экземпляр Locale, равный Locale.ROOT, и экземпляр Locale, равный Locale.US.
Возвращает:
Массив локальных языков, для которых доступны локализованные экземпляры BreakIterator.

© 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.
https://download.java.net/java/early_access/jdk24/docs/api/java.base/java/text/BreakIterator.html

Spec-Zone.ru

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