Класс 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)); }(Итератор, возвращаемый методом BreakIterator.getWordInstance(), уникален тем, что возвращаемые им позиции разрывов не представляют собой и начало, и конец того, что итерируется. То есть, итератор разбиения предложений возвращает разрывы, каждый из которых представляет собой конец одного предложения и начало следующего. С итератором разбиения слов символы между двумя границами могут составлять слово, или они могут быть знаками препинания или пробелами между двумя словами. Приведенный выше код использует простую эвристику для определения того, какая граница является началом слова: если символы между этой границей и следующей границей включают хотя бы одну букву (это может быть буква алфавита, иероглиф КЖ, слог Хангуля, символ Каны и т. д.), то текст между этой границей и следующей является словом; в противном случае это материал между словами.)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; } - С:
- 1.1
- См. также:
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final int |
DONE |
DONE возвращается методами previous(), next(), next(int), preceding(int) и following(int) при достижении первой или последней границы текста. |
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Конструктор. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Object |
clone() |
Создаёт копию этого итератора |
abstract int |
current() |
Возвращает индекс символа границы текста, которая была последней возвращена методом next(), next(int), previous(), first(), last(), following(int) или preceding(int). |
abstract int |
first() |
Возвращает первую границу. |
abstract int |
following |
Возвращает первую границу, следующую за заданным смещением символов. |
static Locale[] |
getAvailableLocales() |
Возвращает массив всех локалей, для которых методы get*Instance этого класса могут возвращать локализованные экземпляры. |
static BreakIterator |
getCharacterInstance() |
Возвращает новый экземпляр BreakIterator для разбиения по символам для символов в по умолчанию локали. |
static BreakIterator |
getCharacterInstance |
Возвращает новый экземпляр BreakIterator для разбиения по символам для символов для заданной локали. |
static BreakIterator |
getLineInstance() |
|
static BreakIterator |
getLineInstance |
Возвращает новый экземпляр BreakIterator для разбиения по строкам для строк для заданной локали. |
static BreakIterator |
getSentenceInstance() |
Возвращает новый экземпляр BreakIterator для разбиения по предложениям для предложений в по умолчанию локали. |
static BreakIterator |
getSentenceInstance |
Возвращает новый экземпляр BreakIterator для разбиения по предложениям для предложений для заданной локали. |
abstract CharacterIterator |
getText() |
Получить текст, который сканируется. |
static BreakIterator |
getWordInstance() |
|
static BreakIterator |
getWordInstance |
Возвращает новый экземпляр BreakIterator для разбиения по словам для слов для заданной локали. |
boolean |
isBoundary |
Возвращает true, если указанное смещение символа является границей текста. |
abstract int |
last() |
Возвращает последнюю границу. |
abstract int |
next() |
Возвращает границу, следующую за текущей границей. |
abstract int |
next |
Возвращает n-ую границу от текущей границы. |
int |
preceding |
Возвращает последнюю границу, предшествующую заданному смещению символов. |
abstract int |
previous() |
Возвращает границу, предшествующую текущей границе. |
void |
setText |
Устанавливает новую строку текста для сканирования. |
abstract void |
setText |
Устанавливает новый текст для сканирования. |
Подробное описание полей
DONE
public static final int DONE
- См. также:
Подробное описание конструкторов
BreakIterator
protected BreakIterator()
Подробное описание методов
clone
first
public abstract int first()
- Возвращает:
- Индекс символа первой границы текста.
last
public abstract int last()
- Возвращает:
- Индекс символа последней границы текста.
next
public abstract int next(int 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). - См. также:
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)
- Параметры:
-
offset- смещение символа для проверки. - Возвращает:
-
true, если "смещение" является позицией границы,falseв противном случае. - Исключения:
-
IllegalArgumentException- если заданное смещение меньше первой границы текста или больше последней границы текста. - С тех пор как:
- 1.2
current
public abstract int current()
BreakIterator.DONE из-за достижения первой или последней границы текста, он возвращает первую или последнюю границу текста в зависимости от достигнутой границы.- Возвращает:
- Границу текста, возвращённую из вышеперечисленных методов, первую или последнюю границу текста.
- См. также:
getText
public abstract CharacterIterator getText()
- Возвращает:
- сканируемый текст
setText
public void setText(String newText)
- Параметры:
-
newText- новый текст для сканирования.
setText
public abstract void setText(CharacterIterator newText)
- Параметры:
-
newText- новый текст для сканирования.
getWordInstance
public static BreakIterator getWordInstance()
- Возвращает:
- Итератор для разбиения на слова
getWordInstance
public static BreakIterator getWordInstance(Locale locale)
BreakIterator экземпляр для разделения на слова для заданной локали.- Параметры:
-
locale- желаемая локаль - Возвращает:
- Итератор для разбиения на слова
- Исключения:
-
NullPointerException- еслиlocaleравен null
getLineInstance
public static BreakIterator getLineInstance()
- Возвращает:
- Итератор для разбиения на строки
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()
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