Класс BreakIterator
- Все реализуемые интерфейсы:
Cloneable
public abstract class BreakIterator extends Object implements Cloneable
BreakIterator реализует методы для определения границ в тексте. Экземпляры класса BreakIterator поддерживают текущую позицию и сканируют текст, возвращая индекс символов, где находятся границы. Внутренне, BreakIterator сканирует текст, используя CharacterIterator, и поэтому может сканировать текст, хранящийся в любом объекте, реализующем этот протокол. StringCharacterIterator используется для сканирования объектов String, переданных в setText. Вы используете фабричные методы этого класса для создания экземпляров различных типов итераторов разбиения. В частности, используйте getWordInstance, getLineInstance, getSentenceInstance, и getCharacterInstance для создания BreakIterator для анализа границ слов, строк, предложений и символов соответственно. Один итератор BreakIterator может работать только с одним типом границ (слово, строка, предложение и так далее). Вы должны использовать разные итераторы для анализа границ каждого типа.
Анализ границ строк определяет, где строка текста может быть разделена при переносе строк. Механизм корректно обрабатывает знаки препинания и слова с дефисами. Фактический перенос строки также должен учитывать доступную ширину строки и обрабатывается программным обеспечением более высокого уровня.
Анализ границ предложений позволяет выполнять выбор с правильной интерпретацией точек в числах и аббревиатурах, а также знаков препинания в конце, таких как кавычки и скобки.
Анализ границ слов используется функциями поиска и замены, а также в приложениях для редактирования текста, которые позволяют пользователю выделять слова двойным щелчком. Выделение слов обеспечивает правильную интерпретацию знаков препинания внутри и после слов. Символы, которые не являются частью слова, такие как символы или знаки препинания, имеют разрывы слов с обеих сторон.
Анализ границ символов позволяет пользователям взаимодействовать с символами так, как они ожидают, например, при перемещении курсора по строке текста. Анализ границ символов обеспечивает правильную навигацию по строкам символов независимо от того, как символ хранится. Возвращаемые границы могут быть границами дополнительных символов, последовательностей комбинируемых символов или кластеров лигатур. Например, акцентированный символ может храниться как основной символ и диакритический знак. То, что пользователи считают символом, может отличаться в разных языках.
- Требования к реализации:
- Реализация анализа границ символов по умолчанию соответствует правилам разбиения расширенных кластеров графем Консорциума Юникода. Более подробную информацию можно найти в разделе Границы кластеров графем в Приложении #29 к стандарту Юникода.
Экземпляры
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, слог Hangul, символ Kana и т.д.), то текст между этой границей и следующей является словом; в противном случае это материал между словами.)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() |
Возвращает новый экземпляр 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
public Object clone()
- Переопределяет:
-
cloneв классеObject - Возвращает:
- Копию этого итератора
- См. также:
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()
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()
- Возвращает:
- Итератор разбиения на предложения
getSentenceInstance
public static BreakIterator getSentenceInstance(Locale locale)
BreakIterator для разбиения на предложения для заданной локали.- Параметры:
-
locale- необходимая локаль - Возвращает:
- Итератор разбиения на предложения
- Исключения:
-
NullPointerException- еслиlocaleравно null
getAvailableLocales
public static Locale[] getAvailableLocales()
get*Instance этого класса могут возвращать локализованные экземпляры. Возвращаемый массив представляет собой объединение локалей, поддерживаемых Java runtime и установленных реализациями BreakIteratorProvider. Как минимум, возвращаемый массив должен содержать экземпляр Locale равный Locale.ROOT и экземпляр Locale равный Locale.US.- Возвращает:
- Массив локалей, для которых доступны локализованные экземпляры
BreakIterator.
© 1993, 2023, 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/21/docs/api/java.base/java/text/BreakIterator.html