Spec-Zone.ru › OpenJDK 17

Класс 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;
 }
 
(Итератор, возвращаемый методом BreakIterator.getWordInstance(), уникален тем, что позиции разрывов, которые он возвращает, не представляют собой как начало, так и конец итерируемого элемента. То есть, итератор границ предложений возвращает разрывы, каждый из которых представляет собой конец одного предложения и начало следующего. С итератором границ слов символы между двумя границами могут быть словом, или они могут быть знаками препинания или пробелами между двумя словами. Приведенный выше код использует простую эвристику для определения, является ли граница началом слова: если символы между этой границей и следующей границей включают по крайней мере одну букву (это может быть буква алфавита, CJK иероглиф, слог Hangul, символ Кана и т. д.), то текст между этой границей и следующей является словом; в противном случае, это материал между словами.)
С тех пор как:
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 если "offset" - позиция разрыва, 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-средой выполнения и установленными реализациями BreakIteratorProvider. Он должен содержать по крайней мере экземпляр Locale равный Locale.US.
Возвращает:
Массив локальных наборов, для которых доступны локализованные экземпляры BreakIterator.

© 1993, 2021, 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/17/docs/api/java.base/java/text/BreakIterator.html

Spec-Zone.ru

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