Класс 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 может работать только с одним типом единиц (словом, строкой, предложением и так далее). Для анализа границ каждого типа единиц необходимо использовать отдельный итератор.
Анализ границ строк определяет, где можно разбить строку текста при переносе на новую строку. Механизм правильно обрабатывает знаки препинания и слова, соединённые дефисом. Фактический перенос строки также должен учитывать ширину строки, и эта задача решается программным обеспечением более высокого уровня.
Анализ границ предложений позволяет осуществлять выбор с правильной интерпретацией точек в числах и аббревиатурах, а также знаков препинания в конце, таких как кавычки и скобки.
Анализ границ слов используется функциями поиска и замены, а также в приложениях для редактирования текста, которые позволяют пользователю выделять слова двойным щелчком мыши. Выделение слов обеспечивает правильную интерпретацию знаков препинания внутри и после слов. Символы, которые не являются частью слова, например, символы или знаки препинания, имеют разрывы слов с обеих сторон.
Анализ границ символов позволяет пользователям взаимодействовать с символами так, как они ожидают, например, при перемещении курсора по строке текста. Анализ границ символов обеспечивает правильное перемещение по строкам символов независимо от способа хранения символа. Возвращаемые границы могут относиться к дополнительным символам, сочетающимся последовательностям символов или группам лигатур. Например, акцентированный символ может храниться как основной символ и диакритический знак. То, что пользователи рассматривают как символ, может отличаться в зависимости от языка.
Экземпляры 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;
}
- С момента:
- 1.1
- См. также:
CharacterIterator
Поля
| Модификатор и тип | Поле | Описание |
|---|---|---|
static int | DONE | DONE возвращается методами previous(), next(), next(int), preceding(int) и following(int) при достижении первой или последней границы текста. |
Конструкторы
| Модификатор | Конструктор | Описание |
|---|---|---|
protected | BreakIterator() | Конструктор. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
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() | Возвращает массив всех языковых наборов, для которых методы |
static BreakIterator | getCharacterInstance() | Возвращает новый экземпляр |
static BreakIterator | getCharacterInstance(Locale locale) | Возвращает новый экземпляр |
static BreakIterator | getLineInstance() | Возвращает новый экземпляр |
static BreakIterator | getLineInstance(Locale locale) | Возвращает новый экземпляр |
static BreakIterator | getSentenceInstance() | Возвращает новый экземпляр |
static BreakIterator | getSentenceInstance(Locale locale) | Возвращает новый экземпляр |
abstract CharacterIterator | getText() | Получить текст, который сканируется |
static BreakIterator | getWordInstance() | Возвращает новый экземпляр |
static BreakIterator | getWordInstance(Locale locale) | Возвращает новый экземпляр |
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()
Создать копию этого итератора
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()
Возвращает массив всех локальных настроек, для которых методы get*Instance данного класса могут возвращать локализованные экземпляры. Возвращаемый массив представляет собой объединение локальных настроек, поддерживаемых Java runtime и установленными реализациями BreakIteratorProvider. Он должен содержать, как минимум, экземпляр Locale равный Locale.US.
- Возвращает:
- Массив локальных настроек, для которых доступны локализованные
BreakIteratorэкземпляры.
© 1993, 2020, 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/11/docs/api/java.base/java/text/BreakIterator.html