Класс 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()

Возвращает массив всех языковых наборов, для которых методы 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()

Возвращает массив всех локальных настроек, для которых методы 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

Spec-Zone .ru
спецификации, руководства, описания, API