Spec-Zone.ru › OpenJDK 8

Класс BreakIterator

  • java.lang.Object
    • java.text.BreakIterator
Все реализованные интерфейсы:
Cloneable

public abstract class BreakIterator
extends Object
implements Cloneable

Класс BreakIterator реализует методы для поиска границ в тексте. Экземпляры BreakIterator сохраняют текущую позицию и сканируют текст, возвращая индекс символов, где встречаются границы. Внутренне, BreakIterator сканирует текст с помощью CharacterIterator, и поэтому может сканировать текст, хранящийся в любом объекте, реализующем этот протокол. StringCharacterIterator используется для сканирования объектов String, передаваемых в setText.

Вы используете фабричные методы, предоставляемые этим классом, для создания экземпляров различных типов итераторов разбиения. В частности, используйте 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;
}
См. также:
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()

Возвращает границу, предшествующую текущей границе.

abstract void setText(CharacterIterator newText)

Установить новый текст для сканирования.

void setText(String 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API