Spec-Zone.ru › OpenJDK 21

Класс 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 может работать только с одним типом границ (слово, строка, предложение и так далее). Вы должны использовать разные итераторы для анализа границ каждого типа.

Анализ границ строк определяет, где строка текста может быть разделена при переносе строк. Механизм корректно обрабатывает знаки препинания и слова с дефисами. Фактический перенос строки также должен учитывать доступную ширину строки и обрабатывается программным обеспечением более высокого уровня.

Анализ границ предложений позволяет выполнять выбор с правильной интерпретацией точек в числах и аббревиатурах, а также знаков препинания в конце, таких как кавычки и скобки.

Анализ границ слов используется функциями поиска и замены, а также в приложениях для редактирования текста, которые позволяют пользователю выделять слова двойным щелчком. Выделение слов обеспечивает правильную интерпретацию знаков препинания внутри и после слов. Символы, которые не являются частью слова, такие как символы или знаки препинания, имеют разрывы слов с обеих сторон.

Анализ границ символов позволяет пользователям взаимодействовать с символами так, как они ожидают, например, при перемещении курсора по строке текста. Анализ границ символов обеспечивает правильную навигацию по строкам символов независимо от того, как символ хранится. Возвращаемые границы могут быть границами дополнительных символов, последовательностей комбинируемых символов или кластеров лигатур. Например, акцентированный символ может храниться как основной символ и диакритический знак. То, что пользователи считают символом, может отличаться в разных языках.

Требования к реализации:
Реализация анализа границ символов по умолчанию соответствует правилам разбиения расширенных кластеров графем Консорциума Юникода. Более подробную информацию можно найти в разделе Границы кластеров графем в Приложении #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));
}
Поиск следующего слова:
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;
}
(Итератор, возвращаемый методом BreakIterator.getWordInstance(), уникален тем, что позиции разрыва, которые он возвращает, не представляют собой как начало, так и конец итерируемого элемента. То есть, итератор разбиения предложений возвращает разрывы, каждый из которых представляет собой конец одного предложения и начало следующего. С помощью итератора разбиения слов символы между двумя границами могут быть словом или знаком препинания или пробелом между двумя словами. Приведенный выше код использует простую эвристику для определения того, какая граница является началом слова: если символы между этой границей и следующей границей включают по крайней мере одну букву (это может быть буквенный символ, иероглиф CJK, слог Hangul, символ Kana и т.д.), то текст между этой границей и следующей является словом; в противном случае это материал между словами.)
С момента:
1.1
См. также:
  • CharacterIterator

Краткое описание полей

Модификатор и тип Поле Описание
static final int DONE
DONE возвращается методами previous(), next(), next(int), preceding(int) и following(int), когда достигнута либо первая, либо последняя граница текста.

Краткое описание конструкторов

BreakIterator()
Модификатор Конструктор Описание
protected
Конструктор.

Краткое описание методов

Модификатор и тип Метод Описание
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.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

Spec-Zone.ru

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