Класс 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)); }(Итератор, возвращаемый BreakIterator.getWordInstance(), уникален тем, что возвращаемые им позиции границ не обозначают одновременно начало и конец обрабатываемого элемента. То есть итератор границ предложений возвращает границы, каждая из которых обозначает конец одного предложения и начало следующего. Для итератора границ слов символы между двумя границами могут образовывать слово либо знаки препинания или пробелы между словами. В приведенном выше коде используется простая эвристика для определения того, какая граница является началом слова: если между этой границей и следующей есть хотя бы одна буква (это может быть буква алфавита, идеограмма CJK, слог хангыль, символ каны и т. д.), то текст между этими границами является словом; в противном случае это текст между словами.)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() |
|
static BreakIterator |
getCharacterInstance |
Возвращает новый экземпляр BreakIterator для границ символов в указанной локали. |
static BreakIterator |
getLineInstance() |
|
static BreakIterator |
getLineInstance |
Возвращает новый экземпляр BreakIterator для границ строк в указанной локали. |
static BreakIterator |
getSentenceInstance() |
|
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, если «offset» является позицией границы, иначе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()
- Возвращает:
- Итератор границ символов
getCharacterInstance
public static BreakIterator getCharacterInstance(Locale locale)
BreakIterator для границ символов в указанной локали.- Параметры:
-
locale— требуемая локаль - Возвращает:
- Итератор границ символов
- Выбрасывает:
-
NullPointerException— еслиlocaleравно null
getSentenceInstance
public static BreakIterator getSentenceInstance()
- Возвращает:
- Итератор границ предложений
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.
© 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://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/text/BreakIterator.html